有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

循环Java扫描器。是否跳过nextInt()?

我编写了一些代码,需要一个int变量来保存0到5之间的值,并编写了一个while循环来验证用户是否输入了一个有效值(0到5),如下所示:

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...       
    } 
}

计划是使用用户输入更新someNumber变量,但循环会继续运行,而不会停止读取nextInt()

输出: 输入一个从0到5的数字 输入一个从0到5的数字 输入一个从0到5的数字 输入一个从0到5的数字 输入一个从0到5的数字 ... (永远)

为什么循环不停止从用户处读取nextInt()


共 (3) 个答案

  1. # 1 楼答案

    因此,基本上条件while(someNumber < 0 || someNumber > 5)总是正确的,因为您使用值-1启动了变量“someNumber”。您要做的是在while指令中使用分号同时包含System.out.println("Enter a number from 0 to 5");someNumber=scanner.nextInt();,以便让someNumber变量更改其值

    代码应该如下所示:

    import java.util.Scanner;
    public class Main {
        public static void main(String[] args) {
            //some code...
            Scanner scanner = new Scanner (System.in);
            int someNumber = -1;
            while(someNumber < 0 || someNumber > 100){
                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...
        }
    }
    
  2. # 2 楼答案

    问题是因为while循环缺少{...}

    应该是的

    while (someNumber < 0 || someNumber > 5) {
        System.out.print("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... 
    }
    

    由于缺少括号,只有以下语句

    System.out.println("Enter a number from 0 to 5");
    

    while循环的范围内

  3. # 3 楼答案

    如果没有在循环后指定{},则只会执行下面的第一行代码(在本例中是System.out.println(“输入0到5之间的数字”)。要执行代码块,需要在while(someNumber<;0 | | someNumber>;5)之后指定{}