2017-03-27 5 views
0

最新のコードでは、いくつかの再帰問題に遭遇することはありません。私は32桁のカスタム番号を追加したり引いたりしています。数字は配列に格納されます。32桁の数字を加算したり減算したりしてStackOverflowErrorを回避する

ここに私の問題を説明するためのコードのビットです:addメソッドで

public Custom subtract(Custom e) { 
    if (isPositive(this) && (!isPositive(e))) { 
     return add(temp); 
    } 

 if (isPositive(this)) { 
      if (!isPositive(e)) { 
       if (this.e.array.length >= e2.array.length) { 
        return subtract(e); 

問題があり、長さは常に一定となり、符号は常になります渡されたパラメータに対しても定数です。私は、各カスタムオブジェクトのコピーを作成し、加算または減算を満たすように符号を変更するのが最善の策だと考えていますが、既存の正しい値を上書きします。誰にもアドバイスはありますか?

+1

無限ループがあります。あなたのaddは常に 'subtract'を呼び出し、subtractは常に' add'を呼び出します。例えば、あなたのカットされたものが実際に多くの意味をなさないようであれば、 'negate()'メソッドを導入するなど、どこかでそれを止めるべきです。たとえばBigDecimalのJDK実装を見てください。 –

+1

これらのメソッドが存在する「カスタム番号」クラス(「カスタム」)全体が表示されていません。クラス全体を見ることなく、私たちはあなたを助けることができません。 –

+0

私は基本的に数字を区別することに問題があります。したがって、arrayOneは[7]、length1のようになります。arrayTwoは[-6]、長さ1になります。arrayOneとarrayTwoを追加すると、私は減算メソッドを呼び出します。しかし、もし私がarrayTwo - arrayOneをしなければならない。私は実際にaddメソッドを呼び出すことになります。私の無限の再帰があります。 – esmith08734

答えて

0

試してみてください。negate()が反転し記号でそのパラメータを返します

public Custom subtract(Custom e) { 
if (isPositive(this) && (!isPositive(e))) { 
    Custom temp = new Custom(negate(e)); 
    return add(temp); 
} 

+0

参考のために、私は6 - 4、つまり10であるとします。もし私が-6 - 4 = 10。しかし、減算法-4〜6を呼び出すと、額面の値、例えば-4〜6を減算しているように見えるため、10ではなく-2になります。 – esmith08734

+0

私はそれを理解しませんでした。 – esmith08734

関連する問題