需要帮助理解/使用扫描仪hasNextInt()

时间:2017-10-25 02:37:53

标签: java java.util.scanner

public static int promptUser(Scanner in, String prompt, int min, int max) {
    int userTempVal = 0;

        do {
        userTempVal = in.nextInt();
            if (userTempVal < min || userTempVal > max) {
            System.out.println(prompt);
            }

       }while (userTempVal < min || userTempVal > max);

    return userTempVal; 
    }

这是我目前的代码。我基本上需要扫描用户的输入并确保它是min和max之间的整数。如果它不是min和max之间的整数,它会显示提示并扫描新的int。如果用户输入除int之外的任何内容(因此为double或字符串),则当前代码将失败。当输入不是int时,如何让我的代码显示提示并继续do while循环?这是我正在上课的,教师暗示我们可以使用hasNextInt()函数来解释这个问题,但每次我尝试使用它时,它都不起作用或者我得到一个错误。请帮忙,我是初学程序员!

编辑(使用具有Next Int()参数):

public static int promptUser(Scanner in, String prompt, int min, int max) {
        int userTempVal = 0;

            do {
            userTempVal = in.nextInt();
                if (userTempVal < min || userTempVal > max || !in.hasNextInt()) {
                System.out.println(prompt);
                }
           }while (userTempVal < min || userTempVal > max || !in.hasNextInt());

        return userTempVal; 
        }

我收到此错误 - &gt;当我键入int时,程序停止运行。当我输入一个字符串时:     Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Unknown Source) at java.util.Scanner.next(Unknown Source) at java.util.Scanner.nextInt(Unknown Source) at java.util.Scanner.nextInt(Unknown Source) at MineTest.promptUser(MineTest.java:60) at MineTest.main(MineTest.java:24)

2 个答案:

答案 0 :(得分:0)

您需要使用in.next()来消费无效输入。

public static int promptUser(Scanner in, String prompt, int min, int max) {
    int userTempVal = 0;

    do {
        if (in.hasNextInt()) {
            userTempVal = in.nextInt();
            if (userTempVal < min || userTempVal > max) {
                System.out.println(prompt);
            }
        } else {
            System.out.println("Invalid input");
            in.next();
        }

    } while (userTempVal < min || userTempVal > max);

    return userTempVal;
}

答案 1 :(得分:-1)

试试这个:

import java.util.*;
public class Main {
    public static void main(String[] args) {
        System.out.println("Correct Number: " + promptUser(new Scanner(System.in), "give corret number", 10, 20));
    }

    public static int promptUser(Scanner in, String prompt, int min, int max) {
        int userTempVal = 0;

        do {
            if(in.hasNextInt()) { //Check if next input is an Integer
                userTempVal = in.nextInt();
                if (userTempVal < min || userTempVal > max) { //Check boundaries
                    System.out.println(prompt); //Print promt
                }
            }
            else {
                in.next(); // Get the next() Object out of Buffer
                System.out.println(prompt);  //Print promt
            }
        }while ((userTempVal < min || userTempVal > max)); // While is out of bounds
        return userTempVal; 
    }
}

如果您有任何疑问,请询问