对错误感到困惑:线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:0在Main.main(Main.java:25)

时间:2015-05-27 20:31:55

标签: java

我之前已经知道有关此错误的问题,但我的情况与其他情况不同。我正在编写提供数据集的均值,方差和标准差的代码。编译代码时我没有遇到任何错误,但是当我尝试运行代码时,我得到如下错误:线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:0     在Main.main(Main.java:25)

/**   
 * Main class of the Java program. 
 * 
 */

public class Main {

    public static void main(String[] args) {
        int sum = 0;
        double xBar = 0;
        double [] dataSet = {1,2,3,4}; // add data here
        int xLenght = dataSet.length;
        double [] diffrenceSquared={};
        double devSum = 0;
        double variance = 0;
        double standardDeviation = 0;
         for (double n: dataSet)
         {
            sum += n;    
         }
          xBar = sum/xLenght;

          for (int i=0; i<dataSet.length; i++)
          {
            diffrenceSquared[i] = (xBar-dataSet[i])*(xBar-dataSet[i]);
          } 
          for (double n:dataSet)
        {
              devSum += n;
        }    
        variance = devSum/xLenght;

        standardDeviation = java.lang.Math.sqrt(variance);
        System.out.println("x bar ="+xBar);
        System.out.println("variance ="+ variance);
        System.out.println("Standard Deviation ="+ standardDeviation);
    }
}

请帮助我!

2 个答案:

答案 0 :(得分:2)

您已使用此声明声明diffrenceSquared为零长度数组:

double [] diffrenceSquared={};

这意味着没有要分配的元素,并且每个索引都超出范围。

您尝试在diffrenceSquared长度限定的循环中将元素分配给dataSet,因此请将其声明为该长度。

double[] diffrenceSquared = new double[dataSet.length];

答案 1 :(得分:0)

double [] diffrenceSquared = new double[dataSet.length];

在Java中,数组不可调整大小,因此您必须从一开始就为它们提供正确的大小。

或者,您可以使用更灵活的List