0

我正在制作一种方法来获取用户想要将多少个数字相加。也就是如果他们想将数字 1 2 和 3 相加。他们想将 3 个数字相加。因此,当我问他们想将多少相加时,我使用 try-catch 来捕捉它们是否输入小数位。因为您不能将 3.5 个数字相加,所以您可以将 3 个数字或 4 个相加。问题是如果用户输入小数,程序将无限循环运行除 try 语句中的内容之外的所有内容。我怎样才能解决这个问题?

这是该方法的代码:

private static int requestMaxInputForFloat(Scanner scanner){
    boolean appropriateAnswer = true; // assume appropriate catch not appropriate to loop again
    int howManyInputs = 1000000; // hold value to return how many inputs. if this value we will not run.

    //request an appropriate number of inputs until appropriate answer = true;
    do
    {
        appropriateAnswer = true; //if looped again reset value to true
        try{
            System.out.print("How many decimal place numbers would you like to sum? ");
            howManyInputs = scanner.nextInt();
        }catch(Exception e){
            System.out.println("Sorry but you can only request to average a whole number set of data.\nTry Again.");
            appropriateAnswer = false;
        }//end of try-catch
        if (howManyInputs <= 0) //invalid answer
        {
            System.out.println("Sorry but "  + howManyInputs + " is equal to or below 0. Please try again.");
        }else{
            appropriateAnswer = false;
        }
    }while(!appropriateAnswer);//end of while loop

    return howManyInputs; //return the value 
}// end of getMaxInput
4

1 回答 1

0

加入scanner.nextLine();catch 块。我认为问题在于如果nextInt()出现错误,扫描仪的“指针”仍然指向一个坏字符,如果你再试nextInt()一次,它会再次尝试扫描同一个坏字符。你必须做一些事情让扫描仪跳过它。在这里,您只想丢弃用户输入的任何内容,因此nextLine()跳过输入行的整个剩余部分的 是最合适的。

另一件事:我会改变

if (howManyInputs <= 0) //invalid answer

if (appropriateAnswer && howManyInputs <= 0) //invalid answer

否则,如果用户输入-1,那么循环将返回并且howManyInputs仍然是-1;那么如果用户键入 3.5,您将收到异常,但您会收到第二条错误消息,因为howManyInputs前一个循环中仍然存在 -1。howManyInputs如果您已经知道存在输入错误,则无需测试。

于 2013-09-11T02:01:26.897 回答