1

这是目前我的代码。我想要它做的是在一个数组中接受最多 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);
}
4

2 回答 2

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;
    }
}
于 2013-07-15T23:30:44.910 回答
0

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

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

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

于 2013-07-15T23:13:37.497 回答