【问题标题】:Input array shows exception in thread "main" java.lang.negativearraysizeexception输入数组在线程“main”java.lang.negativearraysizeexception 中显示异常
【发布时间】:2022-01-06 14:08:58
【问题描述】:

它在 VS Code 上运行良好,但是当我在我们的培训考试所需的编译器上运行它时,它显示了上述错误。可能是什么原因?

这是什么意思?我是编程语言的新手。所以请忽略我的错误。

    import java.util.Scanner;

    public class sum {
    public static void main(String[] args) {

        // Write solution here

        int n = 0, sum = 0;

        Scanner sc = new Scanner(System.in);

        n = sc.nextInt();

        int arr[] = new int[n];

        for (int i = 0; i < n; i++) {

            arr[i] = sc.nextInt();

            if (arr[0] == 0) {

                System.out.println("No elements to sum");

                break;

            }

            else if (arr[0] < 0) {

                System.out.println("Invalid number of elements");

                break;

            }

            else {

                sum = sum + arr[i];

            }

        }

        System.out.println(sum);
        sc.close();
    }
}

【问题讨论】:

  • 表示n is negative
  • @AndyTurner 怎么样?先生,我们该如何解决这个问题?
  • “怎么样?”因为它正在从扫描仪读取负数。 “我们如何解决这个问题”您需要了解传递到您的程序中的内容。我不知道。
  • 条件是输入负数时显示“无效元素数”。
  • 好的,所以在n = sc.nextInt();int arr[] = new int[n]; 行之间,你需要做更多的事情。

标签: java java-8


【解决方案1】:

java.lang.NegativeArraySizeException 异常意味着您试图创建一个负大小的数组。负大小的数组没有意义,所以会抛出这个异常。

必须在int arr[] = new int[n]; 行上抛出异常,因为这是您创建数组的唯一地方,而导致异常的原因是n 是否定的。由于您将 n 定义为 n = sc.nextInt();,因此当将负数传递到标准输入(命令行)时,n 为负数。

从您的代码中可以看出,n 应该是要求和的元素数;但是,当您检查是否有负数的元素时,您写if (arr[0] &lt; 0)。这是检查数组的第一个元素是否小于零,这与n 不同:n 是数组的长度。为了防止出现NegativeArraySizeException,您需要在尝试创建大小为n 的数组之前检查n 是否为负数。

我也不知道你为什么放

if (arr[0] == 0) {

       System.out.println("No elements to sum");

       break;

 }

 else if (arr[0] < 0) {

       System.out.println("Invalid number of elements");

       break;

 }

在循环内部:检查每次迭代没有意义,因为arr[0](和n)的值不会改变。

【讨论】:

    猜你喜欢
    • 2017-02-05
    • 1970-01-01
    • 2013-11-30
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多