如何使用异常处理数组大小的输入和可用于计算平均值的元素?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用异常处理数组大小的输入和可用于计算平均值的元素?相关的知识,希望对你有一定的参考价值。

我的程序将允许用户输入数组大小和数组内部的元素。我的问题是,当输入负数组大小数字时,它仍继续输入元素,而不是InputMismatchException,后者会提示用户再次输入。我是Java新手,请帮帮我

公共类Lab5Class {

    public static double avgArry(double[] a) {
        double sum = 0;
        double average = 0;

        for(double numbers: a) {
            sum+=numbers;
            average = sum / a.length;
        }

        return average;
}   

    public static void main(String[] args) {
        // TODO Auto-generated method stub
       int attempt = 1;
       int size;

    do {  
       try {
           System.out.println("Enter the size of the array : ");
           Scanner input = new Scanner(System.in);
            size = input.nextInt();
           double myArray[] = new double[size];
         System.out.println("Enter the elements of the array one by one: " );
           for(int i = 0;i<size; i++) {
           myArray[i] = input.nextDouble();
           }
           System.out.println("Contents of the array are: "+Arrays.toString(myArray));
           attempt++;
       }catch(InputMismatchException e) {
           System.out.println("Invalid Input! Please try again");
       }
       }while(attempt == 1); 

}
}
答案

不,您不能使用负整数作为大小,数组的大小表示数组中元素的数量。

如果仍然这样做,程序将被毫无问题地编译,但是在执行时会生成NegativeArraySizeException类型的运行时异常

示例:

public class Test {
   public static void main(String[] args) {
      int[] intArray = new int[-5];
   }
}

输出:

Exception in thread "main" java.lang.NegativeArraySizeException
另一答案

您可以尝试类似的方法。重构您的需求

        for (int i = 0; i < size; i++) {
      boolean flag;
      do {
        double temp = input.nextDouble();
        if (temp < 0) {
          System.err.println("Number must be greater than zero");
          flag = false;
        } else {
          myArray[i] = temp;
          flag = true;
        }
      } while (!flag);
    }
另一答案

您可以这样组合if语句和while循环,]

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int attempt = 1;
    int size;
    Scanner input = new Scanner(System.in);

    boolean correctSize = false;

    System.out.print("Enter the size of the array : ");
    size = input.nextInt();
    if (size <= 0) {
        while (!correctSize) {
            System.out.print("ERROR:Size cannot be less than zero, please enter a number greater than zero:");
            size = input.nextInt();
            if (size > 0) {
                correctSize = true;
            }
        }
    }

    double myArray[] = new double[size];
    System.out.println("Enter the elements of the array one by one: ");
    for (int i = 0; i < size; i++) {
        myArray[i] = input.nextDouble();
    }
    System.out.println("Contents of the array are: " + Arrays.toString(myArray));
    attempt++;

}

存在一个称为“ NegativeArraySizeException”的异常,但是您不希望使用该异常,因为应该提示用户再次输入大小。如果您想了解更多信息,请访问this网站。

另一答案

请参见下面Lab5Class的实现。它要求用户重新输入不是数字的值(通过捕获InputMismatchException)。它还不断要求用户输入数组大小,直到输入正数为止。输入所有必需的值后,它将显示数组内容和平均值。

以上是关于如何使用异常处理数组大小的输入和可用于计算平均值的元素?的主要内容,如果未能解决你的问题,请参考以下文章

第四天第一个问题

7.2 jmu-Java-06异常-02-使用异常机制处理异常输入 (5分)

C语言如何输入一个数组

传感器数据进入python后后怎么直接计算机

php如何定义一个数组,输入9个任意的整数,求该数组中所有奇数的平均值。

计算数组列表的平均值?