[英]Java, infinite while loop, incrementation
在下面的Java示例程序中,出現了無限循環,而我不明白為什么:
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);
}
}
}
在while循環中,調用next()方法,每次將i遞增1:next()返回i ++,而while循環中i的值應遞增1。
為什么可能是無限循環的原因? 謝謝。
您使用后遞增。 那應該工作:
public static int next(int v) {
return v+1; //or ++v
}
因此,基本上,示例中的下一個函數返回相同的數字,而不是遞增的數字。
v ++的定義是:
Return the current value of v then add one to v
在您的情況下,v是方法參數,它是main中變量i的副本,因此該方法僅返回傳遞給它的相同值。 v中的增量值永遠不會使用。
您本可以使用++ v。 其定義為:
Add one to v, then return the new value
此處的區別是后綴和前綴運算符。
例如:
int a = 1;
int b = a++; // sets b to to 1 THEN increments a.
// a now equals 2.
int c = ++a; // increments a THEN stores the value in c, c = 3.
調用返回int ++的方法將無法實現您的期望。 這與具有以下功能不同:
while (expression) {
// code...
intValue++;
}
因為在上面的代碼塊中,增量沒有傳遞到單獨的變量中,並且值的完全增量將在退出代碼塊,后綴或前綴形式之前發生。
public static int someMethod(int n) {
return n++;
}
而上面的代碼塊將返回n,然后再遞增。 但是,由於您的代碼將繼續向int n賦予相同的值,因此它將繼續返回相同的值,因為它不是在增加值,而是在該方法的局部變量n上增加。 但是,每次傳遞新值時,n都會重置並返回相同的值,從而導致無限循環。
您是否沒有使用慣用且更易於閱讀的原因是:
for(int i = 0; i < 4; i++){
System.out.println(z[i]/z[i]);
}
... 甚至:
for(int x : z){
System.out.println(x / x);
}
...?
public static int next(int v) {
return ++v;
}
不要忘記,數組在Java中從索引零開始,並且被零除會引發異常。
你應該用
public static int next(int v) { return v + 1; }
使用v ++是錯誤的,因為返回的值是遞增前v的原始值。
此外,在return語句中使用++ v或v ++是不好的樣式,因為++具有修改v的副作用,並且表達式中不應有任何副作用。 副作用只能在自己的聲明中進行,以免造成混淆和不確定的評估順序。
發布增量工作可以肯定,但是您將獲得在array中使用'0'值的異常bcas。 從邏輯上講0/0不可能是無限的,所以除非避免將其除以“ 0”值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.