gpt4 book ai didi

java - 无法正确处理异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:38:52 27 4
gpt4 key购买 nike

我是一名初级 Java 程序员,正在编写一个程序来计算一组正整数的平均值。首先,它询问用户要输入的整数数量。然后,它从用户那里收集整数并输出计算出的平均值。我在处理异常时遇到问题。当用户尝试输入负数进行平均时,异常会正确显示,但它不会正确地继续 for 循环以收集适当数量的数字。例如,下面是一个示例输出:

Please enter the number of integers to be averaged: 5
Enter a number: 1
Enter a number: 2
Enter a number: -3
NegativeIntegerException: N must be a positive integer.
Enter a number: 3
Enter a number: 4
The average is: 0.0

它正确抛出异常,但没有继续填充5个整数。只有其他 4 个有效。

代码如下:

import java.util.*;

class NegativeIntegerException extends Exception {

public NegativeIntegerException()
{
super("N must be a positive integer.");
}
}


public class intAverage {

public static void main(String[] args)
{
int N = 0; //number of integers to be averaged
int[] numbers = null; //array to hold integers
int sum = 0;
int newInt;
double average;
Scanner keyboard = new Scanner(System.in);
int x = 1; //for do-while loop #1
int z = 1; //for do-while loop #2

do {
try {
System.out.print("Please enter the number of integers to be averaged: ");
N = keyboard.nextInt();
numbers = new int[N]; //setting size of array
x = 2;
}
catch (Exception e) {
System.out.println("N must be a positive integer");
}
} while (x == 1);

do {
for(int i = 0; i < N; i++) //collecting the integers
{
System.out.print("Enter a number: ");
newInt = keyboard.nextInt();
if (newInt < 0) {
try {
throw new NegativeIntegerException();
}
catch(NegativeIntegerException e) {
System.out.println(e);
}
}
newInt = numbers[i];
}
z = 2;
} while (z == 1);


for(int y = 0; y < N; y++) //calculate average
{
sum = sum + numbers[y];
}
average = sum / N;

System.out.println("The average is: " + average);

}

}

最佳答案

打印异常时,i减1,继续。这基本上会重新开始迭代。

do {
for(int i = 0; i < N; i++) //collecting the integers
{
System.out.print("Enter a number: ");
newInt = keyboard.nextInt();
if (newInt < 0) {
try {
throw new NegativeIntegerException();
}
catch(NegativeIntegerException e) {
System.out.println(e);
// Ignore this input
i--;
continue;
}
}
numbers[i] = newInt;
}
z = 2;
} while (z == 1);

请注意,您不需要为此抛出异常 - 您可以轻松地说:

do {
for(int i = 0; i < N; i++) //collecting the integers
{
System.out.print("Enter a number: ");
newInt = keyboard.nextInt();
if (newInt < 0) {
System.out.println("NegativeIntegerException: N must be a positive integer");
// Ignore this input
i--;
continue;
}
numbers[i] = newInt;
}
z = 2;
} while (z == 1);

这也更具可读性。

关于java - 无法正确处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36879356/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com