繁体   English   中英

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM