基本数组的界限异常



由于某种原因,我的数组大小无效,我不确定如何更改NextIndex来解决此问题。大小应该是动态的,将NextIndex更改为1没有帮助。

 /**
 * Code for E7.9
 * @Michael Goedken
 */

public class DataSet
{
   // Implmentation
int nextIndex = 0;
 double[] list = new double[1];
 public static void main (String args[])
 {
      DataSet data = new DataSet(5);
      data.add(3.5);
      data.add(7.9);
      data.add(15.2);
      data.add(-7.3);
      System.out.println("Sum: " + data.getSum());
      System.out.println("Expected: 19.3");
      System.out.println("Average: " + data.getAverage());
      System.out.println("Expected: 4.825");
      System.out.println("Maximum: " + data.getMaximum());
      System.out.println("Expected: 15.2");
      System.out.println("Minimum: " + data.getMinimum());
      System.out.println("Expected: -7.3");
     }

构建一个空数据集。@param maximumnumberofvalues此数据集可以容纳

   public DataSet(int maximumNumberOfValues)
   {
       double[] list = {maximumNumberOfValues};
   }

如果数组中有空间,则将数据值添加到数据集中。@param值数据值

   public void add(double value)
   {
       list[nextIndex] = value;
       nextIndex++;
   }

获取添加数据的总和。@return数据的总和或0,如果添加了数据

   public double getSum()
   {
      double sum = 0;
  for (double i : list)
        sum += i;
  return sum;
       }

获取添加数据的平均值。@返回数据的数据或0,如果没有添加数据

   public double getAverage()
   {
       double sum = 0;
       double avg = 0;
          for (double i = 0;i<list.length;i++)
              sum += i;
          avg = sum/list.length;
          return avg;
       }

获取输入的最大值。@返回数据的最大值注意:返回-double.max_value如果未输入值。

   public double getMaximum()
   {
      double max = list[0];
  for (int i = 1; i < list.length; i++)
  {
      if (list[i] > max)
      {
          max = list[i];
      }
  }
  return max;
   }

获取输入的最小值。@返回数据的最小值注意:返回double.max_value如果未输入值。

   public double getMinimum()
   {
       double min = list[0];
      for (int i = 1; i < list.length; i++)
      {
          if (list[i] < min)
          {
              min = list[i];
          }
      }
      return min;
   }
}
public DataSet(int maximumNumberOfValues) {
  double[] list = {maximumNumberOfValues}; 
}

在这里, list s局部变量声明(只有一个元素),这与同名的成员变量无关。

此表达式 {maximumNumberOfValues}实际上意味着"创建一个带有值maximumNumberOfValues的元素的数组"

将值分配给成员变量,其中该值是带有所需数量元素的新数组:

list = new double[maximumNumberOfValues];

更改

int nextIndex = 0;
double[] list = new double[1];

to

int nextIndex = 0;
double[] list;

更改构造函数
public DataSet(int maximumNumberOfValues)
{
    double[] list = {maximumNumberOfValues};
}

to

public DataSet(int maximumNumberOfValues)
{
    list = new double[maximumNumberOfValues];     
}

我不太确定你的问题是什么。

int nextIndex = 0;
double[] list = new double[1];

我可能错了...但是您的数组总是大小为1。正如Ervin Szaligyi所说 ->您必须以不同的方式创建阵列

double[] list = {maximumNumberOfValues};这不是您在Java中使用maximumNumberOfValues的大小创建和分配数组的方式。

您应该这样分配:double[] list = new double[maximumNumberOfValues];

更新:另外,double[] list = {maximumNumberOfValues};应该在构造函数:list = new double[maximumNumberOfValues]中声明,否则您会声明局部变量。您应该将list声明为private构造函数之外。

最新更新