該方案已在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