Problem bei einer Aufgabe
-
ALso mein Programm zeigt mir jetzt keine Fehler mehr an , aber nach der EIngabe der 20 Zahlen passiert absolut nichts
Das Programm wird einfach beendet...ich krieg echt eine Krise, kann mir bitte einer erklären warum das passiert?Ist doch absolut traurig.prog aufgabe4neu void merge(int [] a1, int l1,int [] a2, int l2){ a1= new int[20]; a2= new int[20]; int p1; p1= 0; int p2; p2= 0; //positionen in der Liste int [] temparray; temparray= new int [20]; int i; i=0; while (i < l1 + l2){ if (p1 == l1) //erste liste zuende {temparray[i] = a2[p2]; p2=p2+1; i=i+1;} if (p2 == l2) //zweite liste zuende {temparray[i] = a1[p1]; p1=p1+1; i=i+1;} if (a1[p1] > a2[p2]) {temparray[i] = a2[p2]; p2=p2+1; i=i+1;} else {temparray[i] = a1[p1]; p1=p1+1; i=i+1;} } //rückkopieren in array int g;//Hilfsvariable g=0; while (g < l1){ a1[g] = temparray[g]; g=g+1;} int j;//Hilfsvariable j=l1; while(j < l1 + l2){ a2[j-l1] = temparray[j]; j=j+1;} } void mergesort(int [] liste, int laenge){ int [] helpliste; helpliste= new int[laenge/2]; int [] addliste; addliste= new int[laenge/2]; if (laenge>1){ int i; i=0; int a; a=0; int g; g= laenge/2; while(i<laenge/2){ addliste[i]=liste[i]; i=i+1;} if(i==10){ while(i<laenge){ helpliste[a]=liste[g]; a=a+1; g=g+1; i=i+1;} } mergesort(addliste, laenge / 2); mergesort(helpliste, (laenge+1) / 2); merge(addliste, laenge / 2, helpliste, (laenge+1) / 2); } } { int [] array; array= new int [20]; int i; i=0; while (i < 20) { read(array[i]); i=i+1; } mergesort(array, 20); int g; g=0; while ( g < 20) { print(array[g]); print("\n"); g=g+1;} }
-
Bau dir eine Funktion printArray(int [] array, int length) mit der du Arrays ausgeben kannst. Dann gebe Zwischenergebnisse aus: Das eingelesene Array, das Array das mergesort bekommt, die Teilarrays die mergesort übergibt, die Arrays die merge bekommt, Zwischenarrays und so weiter. Dann siehst du an welcher Stelle der Fehler auftritt und kannst ihn beheben.
-
BAUKO schrieb:
... aber nach der EIngabe der 20 Zahlen passiert absolut nichts
Das unsortierte "array" wird zwar an "mergesort" übergeben, aber
-> an keiner Stelle im Programm wird nach "array" etwas zurückgeschrieben. Weder direkt noch indirekt via Zeiger o.ä.
-
Hab es versucht gleich nach dem einlesen der 20 Zahlen die wieder auszugeben. das passiert aber schon nicht. sehr merkwürdig...woran kann das liegen?
-
// print(array[g]); printArray(array[g]);
-
ok hab jetzt den fehler erstmal gefunden warum der gar nichts ausgegeben hat,
lag an der Zeile 90: print("\n");
das löscht irgendwie alles oder so
ABer nun wird mir am Ende nur die 20 Zahlen ausgegeben, wie ich sie eingegeben habe???
Liegt das vielleicht daran was mergemann geschrieben hat?:Das unsortierte "array" wird zwar an "mergesort" übergeben, aber
-> an keiner Stelle im Programm wird nach "array" etwas zurückgeschrieben. Weder direkt noch indirekt via Zeiger o.ä.
-
Eigentlich sollte es eine neue Zeile anfangen, also quasi ein Enterzeichen.
Stimmen denn die Arrays innerhalb von merge und mergesort?
-
nwp2 schrieb:
also quasi ein Enter
das hab ich doch schon irgendwann von irgendwem gehört *rofl*
-
hmm nee, hab versucht die helpliste auszugeben noch vor Zeile 68,bekomme aber nix raus.nur 0000000000, also 10 nullen... noch eine idee?
-
Nimm mal das if weg:
void mergesort(int [] liste, int laenge){ (...) // if(i==10){ while(i<laenge){ helpliste[a]=liste[g]; a=a+1; g=g+1; i=i+1;} // } (...) }
Sonst kriegt helpliste nur im allerersten Durchgang etwas zugewiesen.