Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo!
Ich hab folgende Aufgabe vor mir .. ^^
Der Benutzer gibt ein Array von integer-Zahlen ein. Das Array soll dann so bearbeitet werden, dass im hinteren Teil alle ungeraden Zahlen stehen und vorne die geraden.
Ich bin mir eigentlich ziemlich sicher, dass mein Programm .. stimmt. Hoffentlich. Aber ich hab immer eine Fehlermeldung, angeblich in Zeile 43. Vielleicht kann sichs mal jemand anschaun, ich komm einfach nicht drauf...
Java:
public class Bsp12 {
public static void main(String[] args) {
int laenge;
int hilf;
int j;
System.out.println("Geben Sie die Anzahl ihrer Werte ein, die sie danach eingeben.");
laenge = SavitchIn.readLineInt();
int feld[] = new int[laenge];
System.out.println("Geben Sie nun die Werte für das Feld ein. Die Anzahl dieser muss der zuvor eingegeben Laenge entsprechen. Es muessen also " +
laenge + " Werte eingegeben werden (sonst wartet das Programm auf erneute Eingabe oder ignoriert die letzten Zahlen):");
for (int i=0; i<feld.length; i++)
feld[i] = SavitchIn.readInt();
System.out.println("Array, bevor etwas verschoben wurde:");
for (int i=0; i<feld.length; i++)
System.out.print(feld[i] +" ");
for (int i=0; i<feld.length; i++) {
if (feld[i]%2 == 0)
feld[i] = feld[i]; // Verschiebe die Zahl nicht, wenn sie gerade ist, also durch 2 teilbar
else {
j = i;
while (j<feld.length) {
hilf = feld[j];
feld[j] = feld[j+1];
feld[laenge-1] = hilf;
j++;
}
}
}
System.out.println("Array, nachdem die ungeraden Zahlen nach hinten verschoben wurden");
for (int i=0; i<feld.length; i++)
System.out.print(feld[i] +" ");
}
}
Entweder du hast einen Fehler gemacht, oder das Oracle/Sun Java Virtual Machine Team hat in Version 1.6 ihrer Laufzeitumgebung einen Fehler eingebaut, den Millionen von Programmierern bisher noch nicht bemerkt haben.
Rate.
Java:
for (int i=0; i<feld.length; i++) {
...
j = i;
..
feld[j] = feld[j+1]; // zugiff auf feld[feld.lengt] -> KRACH
aah stimmt, zeile 43 gibt es hier nicht weil ich den kommentar am anfang des programms weggelöscht hab g
es ist aber genau die zeile
Java:
feld[j] = feld[j+1];
und ich versteh auch was das problem ist, dank dem kommentar von marco13 ^^
das heißt es müsste dann aber funktionieren, solange i < (feld.length-1) ist, oder? muss ich gleich mal bisschen rumprobieren. .. danke!
soo ... hab jetzt bisschen herumgespielt und es funktioniert auch. mehr oder weniger. nämlich nur, wenn nicht 2 ungerade zahlen hintereinander kommen...
von der logik her hab ich mir gedacht muss das sein, weil er, wenn er eine ungerade Zahl liest, alle nach vorne schiebt, die selbe stelle aber nicht nochmal kontrolliert ... also hab ich im else teil (also wenn es eine ungerade Zahl ist) zum Schluss i , also die aktuelle position nochmal um eins herabgesetzt. jetzt passiert aber gar nichts mehr beim ausführen des programms. warum ?
Java:
for (int i=0; i<(feld.length/2+1); i++) {
if (feld[i]%2 == 0)
feld[i] = feld[i]; // Verschiebe die Zahl nicht, wenn sie gerade ist, also durch 2 teilbar
else {
j = i;
hilf = feld[j];
while (j<(feld.length-1)) {
feld[j] = feld[j+1];
j++;
}
feld[laenge-1] = hilf;
i=i-1;
}
}
Nur weil ich selber schon daran verzweifle und soo viel probier und nichts klappt Hab jetzt shcon ne a und ne b Version gg
Und ich muss es am Dienstag abgeben Ich wollte nur dass mein Beitrag nicht nach unten rutscht
Debugen debugen debugen... Das sollte man mit den IDE Mitteln können oder entsprechende Ausgaben machen... Dann sieht man schnell was nicht funktioniert.
In diesem Fall weißt du ja schon, was nicht funktioniert und so wirst du auch herausfinden wieso es nicht geht.
also hab ich im else teil (also wenn es eine ungerade Zahl ist) zum Schluss i , also die aktuelle position nochmal um eins herabgesetzt. jetzt passiert aber gar nichts mehr beim ausführen des programms. warum ?
Das hab ich mir schon gedacht, dass das eine Endlosschleife ist, sonst würd ich ja ne Fehlermeldung kriegen und nicht nur das ewige Laden ^^ Aber ich versteh einfach absolut nicht warum da eine ist. Ich mein, das i wird ja nur dann um 1 herabgesetzt, wenn es eine ungerade Zahl ist, weil eben dann die selbe Position nochmal gelesen werden muss ...
Hab ich jetzt gemacht ,danke!! Bin dann doch noch drauf gekommen. Wenn natürlich nur mehr ungerade Zahlen folgen komm ich nie mehr aus der Schleife raus .. klar xD
Ich hab jetzt die geraden und die ungeraden Zahlen gezählt und gesagt sobald die beiden zusammengezählt die Länge des Feldes ergeben soll er aufhören (break). So ist es zwar umständlich aber es funktioniert.
Durch mein vieles Herumspielen hab ich jetzt zwei völlig verschiedene Versionen, die aber das selbe machen Toll ..