簡體   English   中英

無法在while循環內設置變量

[英]Can't set a variable inside a while loop

Java的新手,很抱歉,如果這是一個愚蠢的問題。 我想從一個while循環中為幾個變量分配新值,但這不起作用。 嘗試編譯時出現錯誤“本地變量newString可能尚未初始化”。 這是一個例子:

public class Test {

    public static String example() {
        String first;
        String second;
        String newString;
        int start = 1;

        while (start<5) {
            if (start<4) {
                first = "hello";
                second = "world";
                newString = first + second;
            }
            start += 1;
        }
        return newString;
    }

    public static void main(String[] args) {
            System.out.println(example());
    }
}

之所以出現此錯誤,是因為編譯器在返回newString之前不知道newString是否會初始化。

盡管知道start<5start<4都是true並且可以執行,但是編譯器在編譯期間不會執行這些類型的計算。 因此,就其所知,這些語句將永遠不會執行,因此newString可能會在初始化之前得到返回。

因此,在聲明它時應該初始化它(例如,將其初始化為null ),以避免發生此錯誤。

Java中有一個規則,即必須先初始化所有局部變量,然后才能對其進行初始化。 您正在使用newString作為返回值,這是一個讀取操作。
盡管您正在為newString分配一個值,但它是在條件情況下( start<5 && start<4 )完成的。 在編譯時,編譯器不知道運行代碼的結果,因此保守地抱怨這種情況。

簡單的解決方案是初始化字符串:

 String newString = "";

當您從方法返回結果變量時,編譯器需要確保將值分配給該變量(在您的情況下為newString )。

盡管您很清楚條件start < 4在某些時候是true ,但是編譯器不夠智能,無法弄清楚這一點,這意味着您只需要返回肯定具有值的變量。

根據您的方法的目的,您有以下機會:

String newString = "";

在這種情況下,您可以確保您的方法永遠不會返回null ,這在某些情況下可能難以發現錯誤。

另一個機會是

String newString = null;

如果要允許您的方法返回null值。

很明顯,在這種情況下,您最終將輸入if -block並在其他情況下為變量newString賦值,這種情況並不那么明顯,因此需要確定是否允許您的方法返回null值。 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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