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

新手上路,请多包涵

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

原文由 max 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 470
2 个回答

变量的范围将该变量的使用限制在它定义的范围内。如果您希望它在更广泛的范围内使用,请在循环外声明它。

但是,由于名称是在循环内部初始化的,所以我不能在外部使用它。

您已经在循环外定义了变量,所以您唯一需要做的就是初始化它,正如您应该得到的错误消息所建议的那样。

 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.
}

原文由 Peter Lawrey 发布,翻译遵循 CC BY-SA 3.0 许可协议

不,这是不可能的,因为在循环中声明的变量的范围仅限于循环。因此该变量不再可访问。

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

现在,x 的范围将从定义它的那一点到封闭块的末尾。所以如果 i 从 0 开始,这里的变量将被创建和销毁 10 次。

原文由 Rishi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题