Java中Scanner.nextInt()被跳过不读取用户输入的原因是什么?
问题根本原因
- 你的代码中
while循环未添加花括号{}包裹逻辑块,按照Java语法规则,无花括号的循环结构仅会将紧随判断条件的第一条语句纳入循环体执行:- 现有代码中仅
System.out.println("Enter a number from 0 to 5");属于while循环的执行内容 - 读取输入的
someNumber=scanner.nextInt();、合法性判断的if分支都在循环体之外,永远不会被循环执行
- 现有代码中仅
- 你初始化
someNumber = -1,永久满足someNumber < 0 || someNumber > 5的循环判定条件,因此程序会无限循环执行打印语句,永远不会走到读取用户输入的代码行。
修复方案
给while循环添加花括号,将输入读取、合法性判断的逻辑都纳入循环体即可,修正后代码如下:
import java.util.Scanner; public class ZeroToFive { public static void main(String[] args) { //some code... Scanner scanner = new Scanner (System.in); int someNumber = -1; while(someNumber < 0 || someNumber > 5) { System.out.println("Enter a number from 0 to 5"); someNumber=scanner.nextInt(); if(someNumber < 0 || someNumber > 5){ System.out.println("Invalid data. You must enter a number from 0 to 5. Try again."); } } // some code that needs someNumber to be a number from 0 to 5... } }
内容的提问来源于stack exchange,提问作者alex angulo
相关产品推荐
相关产品推荐

