Java中如何用while循环获取合法用户输入并解决变量作用域问题
Java实现正整数输入验证的循环与作用域问题
我需要让用户输入至少1个骰子的数量,通过while循环确保输入为正整数。作为学习Java第6周的新手,我搞不懂怎么用while循环实现这个需求,还遇到了变量作用域的问题。
第一次错误尝试:变量作用域受限
我最初写的代码如下,但是变量numOfDice在循环外无法使用:
while (true) { System.out.println("Hello! How many dice would you like to roll"); int numOfDice = scan.nextInt(); if (numOfDice<=0) { System.out.println("Please enter a positive integer and try again"); }else { break; } }
原因是numOfDice是在while循环的代码块内部声明的,它的作用域只限于循环内部,循环结束后就无法访问这个变量了。
第二次错误尝试:无限循环问题
我尝试在循环前初始化变量,但输入负数时会陷入无限循环:
System.out.println("Hello! How many dice would you like to roll"); int numOfDice = scan.nextInt(); while (true) { if (numOfDice<=0) { System.out.println("Please enter a positive integer and try again"); }else { break; } }
问题出在输入负数后,循环里只打印错误提示,但没有重新读取用户的新输入,numOfDice的值一直是负数,导致循环永远无法退出。
最终解决方法:拆分变量声明与赋值
通过把变量声明和赋值分开,同时在循环内更新变量值,解决了两个问题:
System.out.println("Hello! How many dice would you like to roll"); int numOfDice; numOfDice = scan.nextInt(); while (true) { if (numOfDice <= 0) { System.out.println("Please enter a positive integer and try again"); numOfDice = scan.nextInt(); } else { break; } }
这样做的好处:
- 在循环外声明
numOfDice,保证循环结束后变量依然可以被访问 - 在错误分支里重新调用
scan.nextInt(),更新变量值,避免无限循环
内容的提问来源于stack exchange,提问作者Aden Krueger
相关产品推荐
相关产品推荐

