我是一个尝试通过制作游戏来练习的新程序员。 我希望玩家能够设置自己的名字,并回答是或否是该名称是否正确。 我是通过使用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,所以我可以在循环外部使用它。
答案 0 :(得分:8)
变量的范围将该变量的使用限制在其定义的范围内。如果您希望在更广泛的范围内使用它,请在循环外部声明它。
但是,由于名称是在循环内初始化的,我不能在外面使用它。
您已经在循环外定义了变量,因此您唯一需要做的就是初始化它,因为您应该得到错误消息。
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.
}
答案 1 :(得分:1)
不,由于循环中声明的变量的范围仅限于循环,因此无法实现。因此,变量不再可访问。
while(i < 10){
int x = 2;
i++;
}
现在,x的范围将从定义它的位置到封闭块的末尾。因此,如果我从0开始,这里的变量将被创建和销毁10次。
答案 2 :(得分:0)
首先是&#34;范围&#34;,这是您目前正在触摸的问题。到目前为止,您完成此操作的方式似乎是一种很好的方法,您可以在第2行之后的代码中的任何位置使用/访问名称变量。
范围基本上说,你可以使用你在里面声明它的花括号{}内的变量。我假设你目前在一些main方法中有你的代码,因此你可以从行之后的任何地方访问name变量
String name;
只要您不在关闭后尝试使用它,对应于在声明名称之前发生的开口{。
解决方案:要在循环外部使用变量,您需要做的是在循环开始之前声明它,您不必< strong>初始化变量之前,但您必须先将其初始化,然后再尝试将其用于任何事情。通常,如果您需要在更广泛的区域中访问变量,则在进入不那么宽的区域之前,必须声明该变量。
请注意,通过声明我的意思是使用&#34; String&#34;来创建变量引用。在&#34;名称&#34;前面。不要将它与初始化或为其分配值混淆,这与范围无关,只有声明才能设置范围。