do while循环中的变量

时间:2015-08-21 08:27:51

标签: java do-while

以下是一些要求用户输入整数的代码。

public int getValidInput() {
    Scanner user_input = new Scanner(System.in);

    do {
        System.out.println("Enter an integer >=1 and <=10: ");
        int number = user_input.nextInt();

    } while (number > 10 || number < 0);

    return number;
}

虽然我在do命令之外初始化数字,即将其设置为int数时,显示的代码不起作用;然后在do循环集number = user_input.nextInt();中。为什么它适用于一种情况而不是另一种情况?

5 个答案:

答案 0 :(得分:6)

因为在Java中,变量的作用域是声明它们的块。在您的示例中,int number =do...while块中是,因此该变量仅存在于该块中。

通过将声明移出块,进入方法的块,该变量存在于方法的整个块(包括嵌套块)。

答案 1 :(得分:3)

您的问题是您已在循环中定义number。变量在Java中作用域,因此在循环或if语句之外无法访问在循环或if语句中声明的变量。您可以通过移动声明来修复代码,如下所示:

public int getValidInput() {
    Scanner user_input = new Scanner(System.in);
    int number;
    do {
        System.out.println("Enter an integer >=1 and <=10: ");
        number = user_input.nextInt();
    } while (number>10 || number < 0);

    return number;
}

答案 2 :(得分:1)

条件用于从身体外部进入身体,因此决定条件真值的变量必须存在于身体之前。 由于do-while循环的主体块是要执行的代码,因此决定执行它的代码必须不是自身。

答案 3 :(得分:0)

变量的范围仅限于{}。在那些大括号之外你无法访问。当您在顶部初始化时,它会在范围增加时同时访问do和while。

答案 4 :(得分:0)

do-while的花括号{}打开了一个所谓的范围(它们总是这样做,方法或循环或ifs)。范围内的任何声明仅在您在该范围内时才可见,并且也在范围内打开的任何内部范围内可见。

while的条件是大括号外面,因此它看不到中声明的任何变量。如果您将int number;放在do之前,它就像while条件一样在同一范围级别上,因此它与循环内获得的值一样,是条件中的表达式可见。