java - 使用 Scanner 在 Java 中扫描输入

标签 java loops input while-loop java.util.scanner

此代码检查用户输入是否有效。如果它不是一个数字,它将继续循环直到它收到一个数字。之后它将检查该数字是否在界限内或小于界限。它将继续循环,直到收到入站号码。但我的问题是,当我打印选择时,它只显示插入的最后一个数字之后的前一个数字。为什么会这样?

public void askForDifficulty(){
    System.out.println("Difficulty For This Question:\n1)Easy\n2)Medium\n3)Hard\nChoice: ");
    int choice = 0;
    boolean notValid = true;
    boolean notInbound = true;
    do{
        while(!input.hasNextInt()){
            System.out.println("Numbers Only!");
            System.out.print("Try again: ");
            input.nextLine();
        }
            notValid = false;
            choice = input.nextInt();
    }while(notValid);

    do{
        while(input.nextInt() > diff.length){
            System.out.println("Out of bounds");
            input.nextLine();
        }
        choice = input.nextInt();
        notInbound = false;
    }while(notInbound);

    System.out.println(choice);
}

最佳答案

这是因为 while 条件里面的 input.nextInt() 消耗的是整数,所以它后面的一个读取的是下一个。 编辑您还需要像这样组合两个循环:

int choice = 0;
for (;;) {
    while(!input.hasNextInt()) {
        System.out.println("Numbers Only!");
        System.out.print("Try again: ");
        input.nextLine();
    }
    choice = input.nextInt();
    if (choice <= diff.length) break;
    System.out.println("Out of bounds");
}
System.out.println(choice);

关于java - 使用 Scanner 在 Java 中扫描输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12083159/

相关文章:

c++ - 循环在此代码中仅迭代一次,而在另一代码中它正确迭代

python - 如何在 Python 循环中重命名变量

javascript - 在 mouseenter 上使用 javascript 连续循环 div 上的颜色

java - 测量扫描仪输入长度

java - ClassCastException 将字符串解析为 JSONArray

java - 抛出 ExecutionException 但没有原因

javascript - 以编程方式将输入置于编辑状态(就像用鼠标点击它一样)

c++ - 编写一个函数来获取字符串输入

java.lang.NoSuchMethodError : javax. 验证.BootstrapConfiguration.getClockProviderClassName

java - 为什么 Producer.send(record).get() 有效,但 Producer.send(record, callback) 不起作用