所以我正在开发一个java项目,它将对2个复数进行加,减,乘和除。我已经完成了GUI,工作正常,但我得到了一个我无法理解的奇怪错误。
所以我首先测试我的添加功能,因为它最简单。这是我的addButton动作监听器的代码:
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
int r1, r2, imag1, imag2 = 0;
String StrR1 = real1.getText();
r1 = Integer.parseInt(StrR1);
String StrR2 = real2.getText();
r2 = Integer.parseInt(StrR2);
String StrI1 = i1.getText();
imag1 = Integer.parseInt(StrI1);
String StrI2 = i2.getText();
imag2 = Integer.parseInt(StrI2);
ComplexNumber c1 = new ComplexNumber(r1, imag1);
ComplexNumber c2 = new ComplexNumber(r2, imag2);
ComplexNumber calcNum = c1.calcAdd(c2.getReal(), c2.geti());
String str = calcNum.toString();
outLabel.setText(str);
}
});
...到目前为止,这是我的整个ComplexNumbers类:
public class ComplexNumber {
private int realNum = 0;
private int iNum = 0;
public ComplexNumber() {
realNum = 0;
iNum = 0;
}
public ComplexNumber(int r, int i) {
realNum = r;
iNum = i;
}
public void setReal(int r) {
realNum = r;
}
public int getReal() {
return realNum;
}
public void seti(int i) {
iNum = i;
}
public int geti() {
return iNum;
}
public ComplexNumber calcAdd(int r2, int i2) {
int rCalc = realNum + r2;
int iCalc = iNum + i2;
return calcAdd(rCalc, iCalc);
}
public String toString() {
String Str = "";
Str = (realNum + " + " + iNum + "i");
return Str;
}
}
...所以问题是当我运行我的项目并按下我的addButton时,由于某种原因代码进入无限循环。一旦我让程序打印出计算出的数字,并且它们以数千个开始,继续增加,直到代码抛出溢出错误。
我很确定它与calcAdd函数有关,它返回一个complexNumber,并将calcNum设置为等于该函数。我之前从未尝试过类似的东西,并且认为这不是一个问题,但后来发生了这种情况,而且我无法想到我的代码中可以做到的其他任何事情。
任何帮助?
编辑:再看一遍,我很确定我回错了......但是我不确定这是对的......
答案 0 :(得分:1)
您似乎得到了一个StackOverflow异常,因为您在没有基本情况下递归调用calcAdd
,事实上您不需要首先递归调用该方法。
你的方法应该是:
public ComplexNumber calcAdd(int r2, int i2) {
int rCalc = realNum + r2;
int iCalc = iNum + i2;
return new ComplexNumber(rCalc, iCalc);
}