私はいくつかの数学の宿題にそれを適用し、継承を使用して度数分布図を作成することによって、自分のJavaスキルを練習しようとしています。私の頭では、複数の "MyStatClasses"(MyStatClass配列の形式)を持つことができる度数分布(親クラス= FreqDist)として考えています。各FreqDistには、すべてのMyStatClassesにまたがる変数があります。なぜなら、それらを親クラスに入れているからです。しかし、私がMyStatClassコンストラクタを呼び出すと、私のプログラムはStackOverflowErrorを取得します。これは、super(s、i)行がFreqDistコンストラクタを呼び出して開始し、無限ループを引き起こすためです。これが当てはまるとすれば、どうすればこの問題を解決できますか?Java - コンストラクタに関する継承
理想的には、MyStatClass配列にアクセスして、そのMyStatClassにのみ適用される値を取得したいが、それを動作させることはできない。
public class FreqDist {
private MyStatClass[] freqClasses;
private double[] dblValuesArray;
private int intNumberOfClasses;
private double dblMax;
private double dblMin;
private int intClassWidth;
public FreqDist(String strValues, int intNumOfClasses) {
System.out.println("This is the beginning of the FreqDist constructor...");
dblValuesArray = getDoubleValues(strValues);
intNumberOfClasses = intNumOfClasses;
dblMin = dblValuesArray[0];
dblMax = dblValuesArray[dblValuesArray.length - 1];
intClassWidth = (int)Math.ceil((dblMax - dblMin)/intNumberOfClasses);
freqClasses = new MyStatClass[intNumberOfClasses];
for (int x = 0; x < freqClasses.length; x++) {
freqClasses[x] = new MyStatClass(strValues, intNumOfClasses);
}
}
public double[] getDoubleValues(String strValues) {
String[] strValuesArray = strValues.trim().split(" ");
dblValuesArray = new double[strValuesArray.length];
for (int x = 0; x < strValuesArray.length; x++) {
dblValuesArray[x] = Double.parseDouble(strValuesArray[x]);
}
Arrays.sort(dblValuesArray);
return dblValuesArray;
}
public int getNumberOfClasses() {
return intNumberOfClasses;
}
public double getMin() {
return dblMin;
}
public double getMax() {
return dblMax;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("What are the values? ");
String values = scan.nextLine();
System.out.print("How many classes? ");
int classes = scan.nextInt();
FreqDist fd = new FreqDist(values, classes);
}
}
public class MyStatClass extends FreqDist {
public MyStatClass(String s, int i) {
super(s, i);
}
}
なぜ 'MyStatClass'は' FreqDist'のサブクラスである必要がありますか? –
それぞれの 'MyStatClass'に' FreqDist'から来たのと同じプロパティを持たせ、それぞれ独自の別々のプロパティを持つようにしたいと思います。 –
継承パターンにループがあり、これは 'StackOverflowError'を引き起こしています。このループを解除して、エラーを回避します。 –