需要帮助才能试着接住



在第一次尝试中,它的工作原理完全符合我的需要,但在其他两个中,它们没有,我不知道为什么。

First One:它要求输入难度1 - 3,如果不是1、2或3,它循环直到他们输入1、2或3,如果他们输入的不是int,它会显示"无效难度"并要求他们再次输入。

Issue: None (that I know of)

try {
    System.out.println("What would you like the difficulty to be?");
    System.out.println("Easy = 1, Medium = 2, Hard = 3");
    difficulty = userInput.nextInt();
    while((difficulty < 1 || difficulty > 3)){
        System.out.println("Invalid Difficulty. n");           
        difficulty = userInput.nextInt();
    }
} catch(InputMismatchException exception) {
    System.out.println("Invalid Difficulty.n");
    difficulty = selctDifficulty();    
}

第二个:应该做同样的事情,只是没有循环,以确保它落在两个数字之间。

问题:如果他们没有输入int,它会显示无效的数量,然后崩溃

Exception in thread "main" java.util.InputMismatchException
try {
    System.out.println("How many pitchers would you like to buy?");
    amountOfPitchers = userInput.nextInt();
} catch(InputMismatchException exception) {
    System.out.println("Invalid Amount.n");
    amountOfPitchers = userInput.nextInt();
}

第三个:应该和第一个完全一样。

问题:如果我输入一个字符串,它会崩溃

Exception in thread "main" java.util.InputMismatchException
try {
    System.out.println("How much do you want to charge per cup?");
    System.out.println("Between $0.05 and $2.00");
    pricePerCup = userInput.nextDouble();
    while((pricePerCup < 0.05 || pricePerCup > 2.00)){
        System.out.println("Invalid Amount. n");           
        pricePerCup = userInput.nextDouble();
    }
} catch(InputMismatchException exception) {
    System.out.println("Invalid Amount.n");
    pricePerCup = userInput.nextDouble();
}

你的错误行清楚地告诉你错误是什么和在哪里:

线程"main"中的异常java.util.InputMismatchException

在你的第二个和第三个例子的catch子句中有些东西给你错误,但不是第一个。你知道为什么吗?

通过简单的检查,对于您的第二次和第三次尝试和捕获,在由于无效输入而发生异常之后,您仍然试图使用userInput.nextInt()和userInput.nextDouble()处理输入。由此引起的异常不会被捕获,因此会引起问题。

您需要在catch中执行userInput.next()以便移动到下一个输入

第一个在catch块中似乎是递归的,第三个不是…

System.out.println("Invalid Amount: " + userInput.next()); // <-- read the non-double.
// pricePerCup = userInput.nextDouble();
pricePerCup = selectPricePerCup();

因为你在catch中做pricePerCup = userInput.nextDouble(); ?

如果你抓住它,为什么你试图处理输入再次当它不是有效的输入?阅读异常和catch块真正做什么

相关内容

  • 没有找到相关文章

最新更新