Erste Schritte array aufsteigend sortieren und ausgeben

dt-schulte

Mitglied
Hallo liebe Forengemeinschaft :)

Ich bin seit ein paar Tagen dabei, Java zu lernen und hänge gerade an einem Problem, bei dem ihr mir sicher helfen könnt.

Ich habe als Aufgabenstellung: Füllen Sie ein eindimensionales array mit 10 Zahlen. Geben Sie diese Zahlen in umgekehrter Reihenfolge aus. Bis hierhin klappt auch alles.
Dann kommt die Zusatzaufgabe, Sortieren Sie die Zahlen der Größe nach und geben Sie die sortierten Zahlen erneut aus. Hier kommt leider nicht das erwartete Ergebnis raus. Er scheint eine Zahl zu tauschen, aber dann bricht er ab mit der Fehlermeldung: IndexOutofBoundsException: 10 in Zeile 31. Zeile 31 lautet
Java:
   if (matrix[i]>matrix[i+1]) {
.

Mir ist klar, das ich ausserhalb der Menge des arrays bin..aber ich weiß nicht wie ich drin bleibe :)
Vielleicht kann mir ja jemand von euch sagen, wo mein Fehler im Code ist.
Java:
import java.io.*;
import javagently.*;
class zahlenfeld
{
  public static void main(String args[]) 
  throws IOException    
  {
    int i,j=1;
    int matrix[] = new int [10];
    int zwischenspeicher;
    
    BufferedReader in=
    new BufferedReader (
    new InputStreamReader(System.in));
    
    System.out.println("Bitte geben Sie 10 Zahlen ein");
    // Beginnen das array zu füllen
    for (i = 0;i<matrix.length ;i++ ) {
      System.out.println("Bitte geben Sie die " +j+" te Zahl ein");
      matrix [i] = javagently.Text.readInt(in);
      j++;
    } // end of for
    j--;
    //Ausgabe in umgekehrter Reihenfolge
    for(i = matrix.length-1;i>=0;i--) {
      System.out.println("\n Die Zahl in Feld: "+j+" lautet: "+matrix[i]+ "\n");
      j--;
    } // end of for
    // Sortieren nach Zahlengröße mit anschließender Ausgabe
    for (i=0;i<=matrix.length ;i++ ) {
      if (matrix[i]>matrix[i+1]) {
        zwischenspeicher = matrix[i+1];
        matrix[i+1] = matrix[i];
        matrix [i] = zwischenspeicher;
        
      } // end of if
      System.out.println(matrix[i]);
    } // end of for 
  }
}

Vielen Dank für die Hilfe.

Grüße

dt-schulte
 

kaoZ

Top Contributor
if (matrix>matrix[i+1]) {


Das liegt daran das du hier versuchst einen Indizes ( nämlich i+1 ) zu prüfen der nicht existiert sprich wenn du ein Array mit 5 Feldern hast würde hier versucht werden Feld Nummer 5 mit 6 zu vergleichen, 6 existiert aber nicht ;) vielleicht kommst du ja jetzt von selbst drauf :)

Bsp;

[0][1][2][3][4]

hier wäre dann am ende i+1 = [5] dieses Feld ist aber nicht existent.
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Wenn du prüfen willst ob ein Indizes größer oder kleiner ist bietet es sich an eine lokale variable zu erstellen und den aktuellen wert darin zu hinterlegen , zumindest für den einstieg ;)

Edit: wie ich sehe hast du schon einen "buffer" verwendet :) dann kannst du auch einfach prüfen ob der aktuelle Index größer ist als der im Buffer befindliche ;)

sprich :

wenn i > buffer , dann buffer = i

ähnlich funktioniert das ganze auch später bei bestimmten Sortieralgorithmen :)

Genau daran versuch ich gerade zu basteln Aber ich hab die Lösung noch nicht so ganz

Ganz genau das bringt , vom Lern technisch gesehenen Standpunkt aus das meiste , ausprobieren bis eine funktionale Lösung vorliegt :)
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Als Tip: versuch mal verschachtelte Schleifen so zu formatieren :

Java:
for(i = 0; i < len; i++){
  for(j = 0; j < len.lenght - 1; j++){
    .....
  }
}
 
Zuletzt bearbeitet:

dt-schulte

Mitglied
Die Schleife funktioniert ja und macht genau das, was sie soll...

Ausgabe der 10 eingegebenen Zahlen in umgekehrter Reihenfolge.

Die Ausgabe sieht im Moment so aus:

Die Zahl in Feld: 10 lautet: 8


Die Zahl in Feld: 9 lautet: 7


Die Zahl in Feld: 8 lautet: 6


Die Zahl in Feld: 7 lautet: 4


Die Zahl in Feld: 6 lautet: 5


Die Zahl in Feld: 5 lautet: 8


Die Zahl in Feld: 4 lautet: 7


Die Zahl in Feld: 3 lautet: 6


Die Zahl in Feld: 2 lautet: 5


Die Zahl in Feld: 1 lautet: 4

4
5
6
7
5
4
6
7
8
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at zahlenfeld.main(zahlenfeld.java:32)

Sprich alles bis Zeile 28 ist soweit i.O.
Der Fehler kommt danach :)
 
Zuletzt bearbeitet:

dt-schulte

Mitglied
Ok, ich versuch mal in Worten zu beschreiben was ich machen will:
Wenn 1 Größer als 2 ist, dann //
Java:
 if (matrix[i]>matrix[i+1]) {
setze 2 in den Speicher "Zwischenspeicher" //
Java:
 zwischenspeicher = matrix[i+1];
Schreibe Wert 1 auf Position 2 //
Java:
matrix[i+1] = matrix[i];
Schreibe den Wert aus dem Zwischenspeicher auf den Wert 1 //
Java:
matrix [i] = zwischenspeicher;
 

kaoZ

Top Contributor
Das ist mir Klar aber du hast den Ansatz Falsch .....

Angenommen dein Array hat 7 Felder

dann heißt das du zählst in deiner Schleife nicht bis 7 sondern bis 6 da Arrays 0 Basiert sind

sprich deine Schleifendeklaration lautet (i = 0; i < matrix.legth -1 ; i++); und nicht i < matrix.lenght da sonst ne OOB Execption geworfen wird

Out of Bounds !
Java:
public static void main(String[] args){
		
		
		int[] arr = {0,2,6,8,4,7,6};
		
		int temp;
		
		for (int i = 0; i < arr.length; i++) {
			System.out.println(i);
			if(arr[i] > arr[i + 1]) {
				
			}
		}
	}

da hier i + 1 spätestens nach dem vorletzten Indizes out of bounds läuft :)

läuft durch
Java:
public static void main(String[] args){
		
		
		int[] arr = {0,2,6,8,4,7,6};
		
		int temp;
		
		for (int i = 0; i < arr.length - 1; i++) {
			System.out.println(i);
			if(arr[i] > arr[i + 1]) {
				
			}
		}
	}
 
Zuletzt bearbeitet:

dt-schulte

Mitglied
:) Ok, dafür schonmal ganz vielen Dank :) Dadurch ist der Fehler weg.. jetzt muss ich nur noch hinbekommen, das er wirklich sortiert...das macht er nämlich dann doch noch nicht, sprich da ist noch ein bischen Hirnschmalz von mir gefragt.. Bis hier hin aber erstmal vielen vielen Dank :)
 

kaoZ

Top Contributor
Schau dir an was du in der schleife welcher variable/welchem Feld zuweist, dann solltest du das relativ schnell lösen können
 
Zuletzt bearbeitet:

dt-schulte

Mitglied
Ich muss nochmal auf dich zurückkommen... ich steh hier mittlerweile vollends auf dem Schlauch, ich hab mich so in möglichen Lösungen verfangen das ich vor lauter Bäumen den Wald nicht mehr sehe :)

Hast du, ohne mir die Lösung zu veraten nen zweiten Tip? Meine momentane Schleife sieht so aus:
Java:
    for (b=0;b<matrix.length ;b++ ) {
      for (i=0;i<matrix.length-1 ;i++ ) {
        if (matrix[i]>matrix[i+1]) {
          zwischenspeicher = matrix[i+1];
          matrix[i+1] = matrix[i];
          matrix [i] = zwischenspeicher;
        } // end of if
        
      } // end of for

aber das ist auch nicht wirklich richtig :D
 

kaoZ

Top Contributor
mach mal folgendes ,

Java:
wenn i > i+1
// also die aktuelle Position ( größere Zahl durch Bedingung)
zwischenspeicher = matrix[i] 

// da i größer ist als i+1, und wir aufsteigend sortieren, die kleinere Zahl in niedrigerem Index speichern
matrix[i] = matrix[i+1]; 

// dem höheren Index die größere Zahl ( aus dem Zwischenspeicher ) zuweisen
matrix[i+1] = zwischenspeicher;

so sollte das ganze aufsteigend sortiert werden 0123456789......;)

bei einer umgekehrten Reihenfolge musst du dementsprechend andersherum verfahren.
 
Zuletzt bearbeitet:

dt-schulte

Mitglied
Ich nerv bestimmt schon, aber leider komm ich immer noch nicht weiter.

Ich hab das Gefühl, das der Kopf noch nicht ganz richtig ist.

Ich bekomme es einfach nicht hin, das hier irgendwas sortiert wird. Zumindest nicht fortlaufend. Es werden Zahlen umgeschmissen, aber nicht in irgendeine für mich nachvollziehbare Reihenfolge gebracht :(

Die Zahl in Feld: 10 lautet: 2
Die Zahl in Feld: 9 lautet: 4
Die Zahl in Feld: 8 lautet: 3
Die Zahl in Feld: 7 lautet: 6
Die Zahl in Feld: 6 lautet: 4
Die Zahl in Feld: 5 lautet: 3
Die Zahl in Feld: 4 lautet: 6
Die Zahl in Feld: 3 lautet: 4
Die Zahl in Feld: 2 lautet: 5
Die Zahl in Feld: 1 lautet: 7
Sortierte Ausgabe: Feld 1 Zahl: 5
Sortierte Ausgabe: Feld 2 Zahl: 7
Sortierte Ausgabe: Feld 3 Zahl: 4
Sortierte Ausgabe: Feld 4 Zahl: 3
Sortierte Ausgabe: Feld 5 Zahl: 6
Sortierte Ausgabe: Feld 6 Zahl: 4
Sortierte Ausgabe: Feld 7 Zahl: 3
Sortierte Ausgabe: Feld 8 Zahl: 6
Sortierte Ausgabe: Feld 9 Zahl: 2
Sortierte Ausgabe: Feld 10 Zahl: 4

Java:
 for(i=0;i<matrix.length-1 ;i++ ) {
      if (matrix[i]>matrix[i+1]) {
        zwischenspeicher = matrix[i];
        matrix[i] = matrix[i+1];
        matrix [i+1] = zwischenspeicher;
               i++;
      } // end of if
      
    } // end of for 
    
    for (i=0;i<matrix.length ;i++ ) {
      System.out.println("Sortierte Ausgabe: Feld " +(i+1) +" Zahl: "+matrix[i]); 
    } // end of for

Ich glaub ich mach mir jetzt nen Bier auf und vergess Java mal für nen Abend :D Ich hab mich glaub ich so verrant das ich vor lauter Bäumen den Wald nicht mehr sehe :D
 

kaoZ

Top Contributor
if (matrix>matrix[i+1]) {
zwischenspeicher = matrix;
matrix = matrix[i+1];
matrix [i+1] = zwischenspeicher;
i++;


warum zählst du innerhalb der schleife i nochmal hoch ^^ ?

Außerdem du verwendest eine einfach schleife, diese "zählt" dar Array einmal durch ^^

du willst sortieren, sprich musst du deine Operation so oft durchführen bis eben alle zahlen an ihrem platz stehen, und nicht nur einmal über alle Indizes laufen und deren Plätze tauschen, sonst kann da auch nur murks raus kommen :)

Stichwort : verschachtelte For-Schleife

Schau dir mal auf Wiki oder so Bubble Sort an ;)
 
Zuletzt bearbeitet:

dt-schulte

Mitglied
das i++ war noch aus nem versuch hängen geblieben...wollte ne while schleife drumbauen. hatte den gleichen gedanken wie du.aber auch das war nicht das Ziel. :D ich verzweifel langsam :) So doof kann ich doch gar net sein.
 

dt-schulte

Mitglied
Ganz großes Dankeschön... es funktioniert :)

Ein Bier... eine Nacht Ruhe... und schon ist es ne Sache von 5 min :D
Aber ohne deine Geduld und kleinen (bis großen Tipps) hätt ich mich wohl weiter verrant.

So sieht das funktionierende Endergebnis der Schleife aus.

Java:
    for (b=0;b<matrix.length ;b++ ) {

    for(i=0;i<matrix.length-1 ;i++ ) {
        
        if (matrix[i]>matrix[i+1]) {
          zwischenspeicher = matrix[i];
          matrix[i] = matrix[i+1];
          matrix [i+1] = zwischenspeicher;
        } // end of if
        
      } // end of for
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Na Siehste ;) Dann ist doch alles bestens :toll:

Zum üben kannst du ja mal versuchen das ganze absteigend zu Programmieren ;)

Allgemein gewöhne dir an , dein Problem nach dem Softwareprinzip "devide & conquer" zu lösen, zerlege dein großes Problem in mehrere kleine, irgendwann geht das dann wie von selbst.

Was will ich -> was brauch ich -> wie kann ich das in kleinere Schritte/Lösungen aufteilen.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Array aufsteigend sortieren Java Basics - Anfänger-Themen 10
L Prüfe, ob die im String Array enthaltenen Strings aufsteigend sind. Java Basics - Anfänger-Themen 19
J Überprüfung, ob Array aufsteigend sortiert Java Basics - Anfänger-Themen 6
G Prüfen, ob Array aufsteigend sortiert ist Java Basics - Anfänger-Themen 7
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
L Frage zum Array Java Basics - Anfänger-Themen 1
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
P Array vom Typ Klasse Java Basics - Anfänger-Themen 18
Lion.King Array deklarieren und initialisieren Java Basics - Anfänger-Themen 5
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
AkiJou Zeile in 2d Array löschen Java Basics - Anfänger-Themen 2
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
A Elemente in einem Array Java Basics - Anfänger-Themen 5
A Vorkommende Farben ermittel und als Array zurückgeben Java Basics - Anfänger-Themen 7
AhmadSlack Array Java Basics - Anfänger-Themen 7
Jambolo Kartenhand Array Java Basics - Anfänger-Themen 14
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
1 Array rekursiv durchlaufen Java Basics - Anfänger-Themen 8
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
EykS 3D Druckdatei basierend auf 3D Array? Java Basics - Anfänger-Themen 3
sserio Array funktioniert nicht Java Basics - Anfänger-Themen 2
sserio Iterierung über ein zweidimensionales Array Java Basics - Anfänger-Themen 16
sserio Zweidimensionales Array [][] wird untereinander ausgegeben Java Basics - Anfänger-Themen 14
Chris.089 2 Werte im Array tauschen Java Basics - Anfänger-Themen 6
D EinMalEins mithilfe einer for-Schleife und Array Java Basics - Anfänger-Themen 1
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
L Gridmuster in einem Array Java Basics - Anfänger-Themen 2
sgtcoopa Array übergeben Schleife Java Basics - Anfänger-Themen 0

Ähnliche Java Themen

Neue Themen


Oben