这是我编写的类,感觉很“笨拙”,就像应该有一种更好的方法来设置它,而无需使用额外的方法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();
}