JAVA:是否可以在循环内初始化的循环外使用变量?

时间:2016-03-09 07:42:04

标签: java while-loop initialization

我是一个尝试通过制作游戏来练习的新程序员。 我希望玩家能够设置自己的名字,并回答是或否是该名称是否正确。 我是通过使用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,所以我可以在循环外部使用它。

3 个答案:

答案 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;前面。不要将它与初始化或为其分配值混淆,这与范围无关,只有声明才能设置范围。