【问题标题】:Array out of bounds exception for basic array [duplicate]基本数组的数组越界异常[重复]
【发布时间】:2017-09-06 18:23:15
【问题描述】:

由于某种原因,我的数组大小无效,我不确定应该如何更改 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 value 一个数据值

   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;
       }

获取添加数据的平均值。 @return 数据的平均值,如果没有添加数据,则返回 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;
       }

获取输入的最大值。 @return 数据的最大值 注意:如果没有输入值,则返回 -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;

   }

获取输入的最小值。 @return 数据的最小值 注意:如果没有输入任何值,则返回 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;
   }
}

【问题讨论】:

    标签: java arrays


    【解决方案1】:
    public DataSet(int maximumNumberOfValues) {
      double[] list = {maximumNumberOfValues}; 
    }
    

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

    这个表达式{maximumNumberOfValues}实际上的意思是“创建一个数组,其中包含一个值为maximumNumberOfValues的元素”

    改为为成员变量分配一个值,其中该值是具有所需元素数量的新数组:

    list = new double[maximumNumberOfValues];
    

    【讨论】:

      【解决方案2】:

      改变

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

      int nextIndex = 0;
      
      double[] list;
      

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            猜你喜欢
            • 2015-06-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-06-13
            • 1970-01-01
            • 1970-01-01
            • 2013-12-21
            • 2019-07-18
            相关资源
            最近更新 更多