【发布时间】:2016-06-27 17:46:00
【问题描述】:
所以,我正在尝试通过将其应用于一些数学作业并使用继承制作频率分布图来练习我的 Java 技能。在我的脑海中,我将其设想为一个频率分布(父级 class= FreqDist),它可以有多个“MyStatClasses”(以 MyStatClass 数组的形式)。每个 FreqDist 都有跨越所有 MyStatClasses 的变量,这就是我将它们放在父类中的原因。但是,当我调用 MyStatClass 构造函数时,我的程序会收到 StackOverflowError。我认为这是因为 super(s, i) 行回调 FreqDist 构造函数并重新开始,导致无限循环。假设是这种情况,我将如何解决这个问题?
理想情况下,我想访问我的 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。打破这个循环以避免错误。
标签: java inheritance constructor