该方案已在WeightedDie延长模具类,如下一类关系:Java的继承:在超类中调用子类方法
和
public class WeightedDie extends Die
{
private int randomNum;
private int maxNumSides = 6;
private double [] weights;
private Random rand;
private double sum = 0;
private double weightRoll;
private int cumulWeight;
private double cumulWeightDouble;
public WeightedDie()
{
super();
}
public WeightedDie(double[] w)
{
...
}
public int roll()
{
cumulWeight = 0;
cumulWeightDouble = 0;
weightRoll = 0;
rand = new Random();
randomNum = rand.nextInt(100) + 1;
for(int i = 0; i < 6; i++)
{
weightRoll = weights[i]*100;
cumulWeightDouble = weightRoll + cumulWeightDouble;
cumulWeight = (int) cumulWeightDouble;
if(randomNum >= (cumulWeight - weightRoll) && randomNum <= (cumulWeight))
{
_faceValue = i;
break;
}
}
return _faceValue;
}
}
我的问题似乎是,在WeightedDie构造函数使用super()的Die构造函数。在Die构造函数中this.roll()被调用,并且这调用了WeightedDie的roll()而不是Die的roll(),它给出了一个空指针。我想在Die中使用this.roll()来调用Die的roll()方法。这怎么解决?
另请参阅http://stackoverflow.com/questions/6386343/how-to-call-a-super-method-ie-tostring-from-outside- a-derived-class –
是的,这是有道理的。这段代码是由教授提供给我的,所以我不确定我是否需要改变它。但是,我在子类的roll方法中检查了检查是否为null,如果是,则调用super.roll()。我认为这应该解决问题,谢谢! – knueser