Das Programm hat eine Klasse Beziehung, in der WeightedDie das Die Klasse erstreckt sich wie folgt:Java-Vererbung: Aufruf Unterklasse Methode in Superklasse
import java.util.Random;
public class Die
{
private int _maxNumSides;
private Random _rand;
// class level variable with visibility for sub classes
protected int _faceValue;
public final static int DEFAULT_SIDES = 6;
// no param constructor for normal 6 sided die
public Die()
{
_rand = new Random();
_maxNumSides = DEFAULT_SIDES;
this.roll();
}
// will randomly reset the number of dots showing on a side
public int roll()
{
_faceValue = _rand.nextInt(_maxNumSides) + 1;
return _faceValue;
}
...
}
und
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;
}
}
Mein Problem scheint, dass die zu sein Der WeightedDie-Konstruktor verwendet den Die-Konstruktor mit super(). Im Die-Konstruktor wird this.roll() aufgerufen, und dies ruft Wheel() von WeightedDie anstelle von Die's roll() auf, was einen Nullzeiger ergibt. Ich möchte this.roll() in Die, um die roll() -Methode von Die aufzurufen. Wie kann das behoben werden?
TBH würde ich 'roll' aus dem Konstruktor entfernen-es nicht da sein sollte - und dann, nachdem das Objekt konstruiert ist, kannst du 'roll' anrufen –
Siehe auch http://StackOverflow.com/questions/6386343/How-to-Call-As-Super-Method-ie-Tostring-from-Out-Side- a-derived-class –
Ja, das macht Sinn. Dieser Code wurde mir von einem Professor zur Verfügung gestellt, also bin ich mir nicht sicher, ob ich ihn ändern soll. Ich überprüfte jedoch die Roll-Methode der Unterklasse, um nach Null zu suchen, und falls dies der Fall ist, super.roll() aufzurufen. Ich denke, das sollte die Dinge reparieren, danke! – knueser