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