这是我写的一个类,它感觉'笨重',就像应该有一个更好的方法来设置它,而不需要额外的方法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
以这种方式。
那么我还缺少一个更强大的优雅解决方案吗?如果我在解决之前找到一个,我会在这里发布。
修改
只是要清楚,如果我编译类(或者甚至是从该类创建对象的程序)我没有任何问题,直到我实际运行程序(因此运行时问题与编译时,但想要要清楚)
答案 0 :(得分:2)
为什么甚至有一个setList()
方法 - 一个私有(?)mutator。为什么不在构造函数中设置processed = new int[before]
?
Numbersplode(int before, int goal) {
this.before = before;
this.goal = goal;
processed = new int[before];
transList();
}