簡體   English   中英

Java,無限while循環,遞增

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM