单击“添加”按钮时收到StackOverflow错误

时间:2017-12-02 02:07:02

标签: java

所以我正在开发一个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设置为等于该函数。我之前从未尝试过类似的东西,并且认为这不是一个问题,但后来发生了这种情况,而且我无法想到我的代码中可以做到的其他任何事情。

任何帮助?

编辑:再看一遍,我很确定我回错了......但是我不确定这是对的......

1 个答案:

答案 0 :(得分:1)

您似乎得到了一个StackOverflow异常,因为您在没有基本情况下递归调用calcAdd,事实上您不需要首先递归调用该方法。

你的方法应该是:

public ComplexNumber calcAdd(int r2, int i2) {    
       int rCalc = realNum + r2;
       int iCalc = iNum + i2;
       return new ComplexNumber(rCalc, iCalc);
}