2017-12-02 15 views
-3

私は2つの複素数を加算、減算、乗算、および除算するJavaプロジェクトに取り組んでいます。私はGUIを終了し、正常に動作しますが、私は理解できない非常に奇妙なエラーが発生しています。追加ボタンをクリックするとStackOverflowエラーが発生する

だから私はまず簡単に追加機能をテストしています。

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クラスである:ここに私のaddButtonアクションリスナーのためのコードがある

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を押して、何らかの理由でコードが無限ループに入ります。プログラムが計算された数値を出力したら、数千から始まり、コードがオーバーフローエラーを投げるまで増加を続けました。

私は、それがcomplexNumberを返すcalcAdd関数と何かと同じことを確信しており、calcNumをその関数と等しく設定しています。私はこれまでにそういったことを試みたことは一度もありませんでしたが、これは大した問題ではないと思っていましたが、これが起こりました。

助けが必要ですか?

EDIT:再びそれを見て、私は私が間違ったことを返すよかなり確信している...しかし、正しいこととは何かをイム本当にわからない...

答えて

1

あなたはStackOverflowのを取得しているようです例外は、基本ケースなしでcalcAddを再帰的に呼び出すためです。実際は、最初に再帰的にメソッドを呼び出す必要はありません。

あなたの方法は次のようになります。

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