如何重复直到用户输入整数?

时间:2013-07-15 23:02:48

标签: java arrays parsing loops

这是我目前的代码。 我想要它做的是,在一个数组中接受多达10个数字,然后为它们显示一些数学。我设法做的是捕获错误,然后停止程序。 我想要它做的是保持程序运行,直到用户正确输入一个整数。 我设法为我的y / n字符串执行类似的操作,但我不知道如何为整数数组执行此操作。

public static void main(String[] args) {
    Scanner input = new Scanner (System.in);
    int i=0, numberlist[] = new int [10];
    String yn=null;

        while (i < 10)
    {
        try {
            System.out.print("Please enter your number\n");
            numberlist[i]=input.nextInt();
            System.out.print("Would you like to enter another number? (y/n)\n");
            yn=input.next();
            i++;
                        if (i==10)  
                            {System.out.println("You reached the maximum amount of numbers\n");
                            break;}

                        if (yn.equals("n"))
                            break;

                        else if (!yn.equals("y"))

                            while (true)
                                {System.out.print("Please only enter a 'y' for yes or 'n' for no next time.\nDo you understand? Type 'y' to continue\n");
                                yn=input.next();
                                    if (yn.equals("y"))
                                        break;
                                }


            }catch (Exception e){System.out.println("Please enter the correct number(integers only) next time.");}
}

    int max=numberlist[0], min=numberlist[0], numlength = i, sum=0;
    float average;

    for(i = 0; i < numlength; i++) {
        if(numberlist[i] > max)
            max = numberlist[i];            
    }

    for(i = 0; i < numlength; i++) {
        if(numberlist[i] < min)
            min = numberlist[i];
    }

    for(i = 0; i < numlength; i++) {
        sum=numberlist[i]+sum;
    }
    average = (float)sum/(float)numlength;

    System.out.println("Your Sum is: "+sum);
    System.out.println("Your Average is: "+average);
    System.out.println("Your Maximum is: "+max);
    System.out.println("Your Minimum is: "+min);
}

2 个答案:

答案 0 :(得分:1)

移动while循环内的数字的错误处理,以便任何异常都不会破坏循环的流程并结束程序。

while (i < 10) {
    try {
        System.out.print("Please enter your number\n");
        numberlist[i] = input.nextInt();
        System.out.print("Would you like to enter another number? (y/n)\n");
        yn = input.next();
        i++;
        if (i == 10) {
            System.out.println("You reached the maximum amount of numbers\n");
            break;
        }

        if (yn.equals("n"))
            break;
        else if (!yn.equals("y"))
            makeUserUnderstand(input,
                    "Please only enter a 'y' for yes or 'n' for no next time.");

    } catch (InputMismatchException e) {
        makeUserUnderstand(input,
                "Please enter the correct number (integers only) next time.");
    }
}

我已经将常见的“你明白了吗?”部分移到方法中。

private static void makeUserUnderstand(Scanner input, String msg) {
    while (true) {
        System.out.println(msg);
        System.out.println("Do you understand? Type 'y' to continue\n");
        if (input.next().equals("y"))
            break;
    }
}

答案 1 :(得分:0)

首先,不要捕捉异常。您应该只捕获您关心的特定异常,并且知道您的代码可能会出现这些异常。任何其他例外都表明存在严重问题,并且通过捕获它们,您可能会意外地压制表明需要您注意的错误的重要信息。

话虽如此,您可以通过仅包装读取输入的代码来使try块更小来解决您的问题。此外,创建一个循环,检查指示是否发生错误的标志。当将输入解析为整数时发生错误,可以在catch块中设置该标志。

如果您无法将我的描述翻译成代码,请随时询问详细信息。