Java, unendliche while-Schleife, Schrittweite
in der folgenden Beispiel-Programm in Java, bekomme ich die endlos-Schleife, und ich kann nicht verstehen, warum:
public class Time {
public static int next(int v) {
return v++;
}
public static void main(String[] args) {
int[] z = {3, 2, 1, 0};
int i = 1;
while(i < 4) {
System.out.println(z[i]/z[i]);
i = next(i);
}
}
}
In der while-Schleife die Methode next() aufgerufen wird, und ich sollte erhöht werden jedes mal von einer 1: next() zurückgeben sollte, i++, und der Wert von i in der while Schleife um eins erhöht werden.
Warum könnte der Grund für die Endlosschleife?
Danke.
- watchout für eine division durch null bei i = 3.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie post-Inkrementierung.
Das sollte funktionieren:
also im Grunde, Sie Ihre nächste Veranstaltung in deinem Beispiel gibt die gleiche Anzahl, nicht erhöht eine.
Die definition für v++ ist:
In Ihrem Fall, v die parameter der Methode, die eine Kopie der variable i in der main, so dass die Methode nur denselben Wert zurück, der an es übergeben wurde. Der erhöhte Wert in v ist nie benutzt.
Könnten Sie verwendet haben ++v. Die definition ist:
Der Unterschied hier ist postfix vs Präfix-Operatoren.
Beispiel:
Aufruf einer Methode, die zurückgibt, int++ wird nicht tun, was Sie erwarten. Es ist nicht das gleiche wie mit dieser:
weil im code-block oben, die Schrittweite wird nicht übergeben wird, in eine separate variable, und die volle Schrittweite des Werts auftreten, vor verlassen des code-Blocks, postfix-oder Präfix-form.
in der Erwägung, dass der codeblock oben zurück n, dann erhöht es später. Aber da dein code wird halten was der gleiche Wert int n, wird es immer wieder geben den gleichen Wert zurück, da es nicht Inkrementieren Ihren Wert, sondern die variable, die lokal für die Methode, - n. Jedes mal, wenn Sie übergeben einen neuen Wert obwohl, n zurückgesetzt und das gleiche zurückgeben, was Sie in Ihrer unendlichen Schleife.
Gibt es einen Grund, Sie sind nicht mit den mehr idiomatische und einfacher zu Lesen ist:
... oder auch:
... ?
Nicht vergessen, arrays starten mit index null in Java und die division durch null eine exception wirft.
Sollten Sie verwenden
Unter v++ ist falsch, wie der zurückgegebene Wert ist der ursprüngliche Wert von v vor der Inkrementierung.
Darüber hinaus mit ++v oder v++ in der return-Anweisung ist schlechter Stil, weil ++ hat den Nebeneffekt, ändern von v, und es sollten keine Nebenwirkungen in Ausdrücken. Nebenwirkungen sollte nur durchgeführt werden, in Aussagen, die der eigenen Verwirrung zu vermeiden und eine Undefinierte Reihenfolge der Auswertung.
post-Inkrement-Arbeit, sicher, aber u ll Ausnahme von bcas mit '0' Wert im array . logisch 0/0 ist nicht möglich, das unendliche, so exceptio auftreten, vermeiden Sie die Division durch '0' Wert