Zum Forum springen
Java skillz inside ...
 
Benachrichtigungen
Alles löschen

[Geschlossen] Java skillz inside (kleine 1*1) ^^

11 Beiträge
6 Benutzer
0 Reactions
936 Ansichten
Freaky45
Beigetreten: 01.05.2007

hab hier ne relativ einfache Aufgabe..

Sinn dahinter soll sein. Ich erzeuge einen festdefinierten array. Dieser soll im Ringtausch sortiert und ausgegeben werden.

Aber das Programm startet meine Programmvariante nicht einmal. Es kommt immer:"

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6 at Sortierung.main(Sortierung.java:14)

public class Sortierung
{

public static void main (String args[]) {

int [] m = {2,6,8,9,5,2};
int Speicher= 0;
int i= 0;

for(i=0; i<6; i++)

{
if (m > m [i+1]);
{

Speicher= m ;
m = m [i+1];
m [i+1]= Speicher;
}

}
int j=0;
for (j=0; j<6; j++)
{
System.out.println ("Die Reihenfolge ist"+ m [j]);
}
}
}


10 Antworten
Kilania
Beigetreten: 23.04.2007

Verschoben ins dafür vorgesehene Forum. .. ;)

Gruß,
Kilania


luxxx
Beigetreten: 21.12.2006
if (m [i] > m [i+1]);     //Diese Zeile schafft es nicht durch die letzte Schleifeniteration!

Wenn du bei i=5 bist, wird m[6] abgefraft, was nicht definiert ist.

Einfachste dumme Loesung. Feld eins groesser machen.


ChrizD
Beigetreten: 09.11.2006

Die bessere Lösung wäre wohl aus der 6 eine 5 zu machen.

Aber was genau soll eigentlich am Ende rauskommen? 2 2 5 6 8 9?


Wäre ringtausch nicht nur alles verschieben oO?

Was du machst ist ein einzelner Durchgang Bubblesort.


luxxx
Beigetreten: 21.12.2006

Das ist ne gute Frage. Ringtausch ist mir total neu.

Fuer ein Bubblesort braucht man zumindest eine weitere Schleife, genauso wie fuer fast alle anderen Sortieralgorithmen.

Edit: kurz mal gegooglet:
Ringtausch: die Werte der Variablen a, b, c, d und e reihum durchtauscht.

Das macht das Programm auch irgendwie nicht.


Freaky45
Beigetreten: 01.05.2007

Habs :)

Er gibt die 11 nicht aus.. mach ich aber <6 bin ich wieder out of blub

für dies interessiert:

public class Sortierung
{

public static void main (String args[]) {

int [] m = {11,6,8,9,5,2};
int Speicher= 0;
int i= 0;
int j= 0;
for(j=0; j<5;j++){
for(i=0; i<5; i++)

{
if (m > m [i+1])
{

Speicher= m ;
m = m [i+1];
m [i+1]= Speicher;

}

}
}

for (i=0; i<5; i++){
System.out.println ("Die Reihenfolge ist"+ m );
}
}
}


luxxx
Beigetreten: 21.12.2006

Fuer die Ausgabeschleife musst du natuerlich wieder bis 6 gehen, das ist dir schon klar, oder?

Also sollte es doch ein Bubblesort sein und kein Ringtausch?


Das <6 soll nur bei der Ausgabe hin, nicht oben bei der Sortierung (mittlerweile ist es ja doch bubblesort :f_confused:)

System.out.print("Die Reihenfolge ist: ");
for (i=0; i<6; i++){
System.out.print (m +" ");
}


Freaky45
Beigetreten: 01.05.2007

ehrlich gesagt, versteh ich den Unterschied zwischen bubblesort und ringtausch nicht? :]


vaaya
Beigetreten: 22.01.2010

Hab den Begriff Ringtausch auch noch nie gehört, aber so wie ich die Def versteh, ist es einfach der Tausch zweier Variablenwerte über ein temp. Also das was du hier machst.

Speicher= m [i];
[/i] m [i]= m [i+1];
[/i] m [i+1]= Speicher;

Bubblesort sortiert dir ganze Collections, allerdings ist deine Lösung in jedem Fall aufwendiger als Bubblesort da du durch die 2. For-Schleife immer O(n²) Aufwand hast. Ist deine Liste zB bereits in richtiger Reihenfolge sortiert (bestcase) würde ein einfacher Schleifendurchlauf ausreichen.

Kenne es anders:

int [] m = {11,6,8,9,5,2};
int Speicher= 0; 
boolean switch = true;

while (switch){ 
    switch = false;
    for(int i=0; i<5; i++)  { //i kann auch erst hier deklariert werden, vllt ein bisschen sauberer :)     if (m [i]> m [i+1]){ 
        Speicher= m [i];
        m [i]= m [i+1];
        m [i+1]= Speicher;  
        switch = true;
   }
}

Heißt, wenn du einen Durchgang hast, indem nicht mehr getauscht wird, bis du fertig (bei bereits sortierter Liste eben direkt nach dem ersten Durchlauf, da kein Tausch stattfinden muss)