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