以下是一些要求用户输入整数的代码。
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();
中。为什么它适用于一种情况而不是另一种情况?
答案 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
条件一样在同一范围级别上,因此它与循环内获得的值一样,是条件中的表达式可见。