这是我目前的代码。 我想要它做的是,在一个数组中接受多达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);
}
答案 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块中设置该标志。
如果您无法将我的描述翻译成代码,请随时询问详细信息。