这是我编写的类,感觉很“笨拙”,就像应该有一种更好的方法来设置它,而无需使用额外的方法setList()实例化数组。我只想保留与我的问题相关的部分,以及我第一次引发运行时(而非编译时)错误的示例。我仍然经常习惯于解释语言,因此Java的更严格的规则需要一些习惯。

public class Numbersplode
{
   // fields
   private int before;
   private int goal;
   private int[] processed;

   // constructors
   Numbersplode(int begin, int finish)
   {
      this.before = begin;
      this.goal = finish;
      this.processed = this.setList(begin);
      this.transList();
   }

   // mutators
   private int[] setList(int begin)
   {
      int[] result = new int[begin];
      return result;
   }

   public void transList()
   {
      // transforms the list
      int count;
      double temp;

      for (count = 0; count < this.before; count++)
      {
         temp = (double)count/(double)this.before * (double)this.goal;
         this.processed[count] = (int)temp;
      }
   }
}


看来我应该能够避免使用setList()方法,但是当我尝试使用此方法时(其他所有方法都一样):

public class Numbersplode
{
   // fields
   private int before;
   private int goal;
   private int[] processed = new int[before];

   // constructors
   Numbersplode(int begin, int finish)
   {
      this.before = begin;
      this.goal = finish;
      this.transList();
   }
[..............]


我收到java.lang.ArrayIndexOutOfBoundsException: 0,因为显然无法用processed[]进行定义。

那个额外的类似乎可以解决问题,但是在我看来,构造函数应该在对象创建的同时定义所有这些变量,从而允许以这种方式同时定义数组processed

那么,有没有更理想的解决方案?如果在解决之前找到一个,我会在这里发布。

编辑

只是要清楚一点,如果我编译该类(甚至是一个从该类创建对象的程序),直到我真正运行该程序时,我才不会遇到任何问题(因此,运行时问题与编译时问题有关,但我想弄清楚)

最佳答案

为何还要使用setList()方法-一个private(?)变异器。为什么不简单在构造函数中设置processed = new int[before]

Numbersplode(int before, int goal) {
  this.before = before;
  this.goal = goal;
  processed = new int[before];
  transList();
}

07-28 12:59