【问题标题】:Exception in thread "main" java.lang.NegativeArraySizeException线程“主”java.lang.NegativeArraySizeException 中的异常
【发布时间】:2017-02-05 03:13:32
【问题描述】:

这是我的第一个 Java 大项目。我被这个错误困扰了好几个小时。我假设我因为字符串而犯了一个错误。如果我的代码没有意义,我深表歉意。我正在努力学习我的错误。你能帮我找出我的错误吗?

    InfoGain = new double[noOfAttributes];  
    GainRatio = new double [noOfAttributes];
    findUnique();

【问题讨论】:

  • 您正在尝试创建一个具有负大小的数组。该异常甚至以它命名。

标签: java arrays csv compiler-errors java-8


【解决方案1】:

您创建两个长度为 noOfAttributes - 1 的双精度数组。但是,在您创建它们的那一刻,noOfAttributes 仍然为 0,因此您收到的大小为 -1,这是非法的。

看,你在条件表达式中设置了noOfAttributes。如果您不输入if-statement,那么它将为0。

【讨论】:

  • 请您纠正一下好吗?
  • 我给了你异常的原因。它是由于业务逻辑问题而发生的。你必须自己修复它。
【解决方案2】:

大小为 0 的数组是可能的,但不是负大小

int []x=new int[0];     //this is possible.
int []x=new int[-4];   // this is not possible

所以检查 noofAttributes 值,它可能是负数。

【讨论】:

    【解决方案3】:

    你需要明白,首先Java中的数组以0作为它们的第一个索引。

    当你写作时

    InfoGain = new double[noOfAttributes-1];

    属性的初始值不能为 0,因此 InfoGain 将尝试在数组中索引 -1,但该数组不存在,因此会出现此异常。

    尝试使用这个:InfoGain = new double[noOfAttributes]; 用于数组,基本上它应该可以工作。

    【讨论】:

      【解决方案4】:

      您可以通过以下简单的 if-else 条件解决上述错误:

      if(noOfAttributes > 0){
           InfoGain = new double[noOfAttributes];  
           GainRatio = new double [noOfAttributes];
      }
      else{
           InfoGain = new double[INITIAL_VALUE];  
           GainRatio = new double [INITIAL_VALUE];
      }
      findUnique();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-22
        • 2013-02-17
        • 2013-12-20
        • 1970-01-01
        • 2014-03-31
        • 2013-05-06
        • 2017-11-12
        • 2015-01-17
        相关资源
        最近更新 更多