簡體   English   中英

JAVA:是否可以在循環內初始化的循環外使用變量?

[英]JAVA: Is it possible to use a variable outside a loop that has been initialised inside a loop?

我是一個嘗試通過制作游戲來練習的新程序員。 我希望玩家能夠設置自己的名字,並回答是或否是該名稱是否正確。 我是通過使用while循環完成的。 但是,由於名稱是在循環內初始化的,我不能在外面使用它。 我想知道是否還有這樣做。

我的代碼可能非常基本和雜亂。 我為此道歉。

    Scanner input = new Scanner(System.in);
    String name;
    int nameRight = 0;

    while (nameRight == 0) {

        System.out.println("What is your name?");
        name = input.nextLine();

        System.out.println("So, your name is " + name + "?");
        String yayNay = input.nextLine();

        if (yayNay.equals("yes") || yayNay.equals("Yes")) {
            System.out.println("Okay, " + name + "...");
            nameRight++;

        } 
        else if (yayNay.equals("no") || yayNay.equals("No")) {

            System.out.println("Okay, then...");

        } 

        else {
            System.out.println("Invalid Response.");
        }

    }

基本上,我希望在循環中初始化String name,所以我可以在循環外部使用它。

變量的范圍限制了該變量在其定義范圍內的使用。如果您希望在更廣泛的范圍內使用它,請在循環外部聲明它。

但是,由於名稱是在循環內初始化的,我不能在外面使用它。

您已經在循環外定義了變量,因此您唯一需要做的就是初始化它,因為您應該得到錯誤消息。

String name = "not set";

while(loop) { 
     name = ...

     if (condition)
        // do something to break the loop.
}
// can use name here.

基本問題是編譯器無法確定變量將在所有可能的代碼路徑中設置。 有兩種方法可以在不使用虛擬值的情況下解決此問題。 您可以使用do/while循環。

String name;
boolean flag = true;
do {
    name = ...
    // some code
    if (test(name))
        flag = false;
    // some code
} while(flag);

或者放棄這個條件,因為你不需要櫃台。

String name;
for (;;) {
    name = ...
    // some code
    if (test(name)) {
       break;
    // some code if test is false.
}

不,這是不可能的,因為循環中聲明的變量的范圍僅限於循環。 因此變量不再可訪問。

while(i < 10){
    int x = 2;
    i++;
}

現在,x的范圍將從定義它的位置到封閉塊的末尾。 因此,如果我從0開始,這里的變量將被創建和銷毀10次。

首先是“范圍”,這是你目前正在觸摸的問題。 到目前為止,您完成此操作的方式似乎是一種很好的方法,您可以在第2行之后的代碼中的任何位置使用/訪問名稱變量。

范圍基本上說,你可以使用你在里面聲明它的花括號{}內的變量。 我假設你現在在一些main方法中有你的代碼,因此你可以從行后的任何地方訪問name變量

String name;

只要你在關閉之后不嘗試使用它,對應於在聲明名稱之前發生的開口{。

解決方案:在循環外部使用變量需要做的是在循環開始之前聲明它,之前不必初始化變量, 但是在嘗試將其用於任何事情之前必須初始化它。 通常,如果需要在更寬的區域中訪問變量,則必須在進入不那么寬的區域之前聲明該變量。

請注意,通過聲明我的意思是通過在“name”前面使用“String”來創建變量引用。 不要將它與初始化或為其賦值相混淆,這與范圍無關,只有聲明才能設置范圍。

暫無
暫無

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

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