2016-07-26 14 views
-1

出力用のToStringのオーバーライドを持つ複素数クラスがあります。複合番号の表示

複素数の構造のための5例、出力のためにわずかに異なるフォーマットを必要とする各あります

a == 0, b == 0: "0" 
a == 0, b != 0: "bi" 
a != 0, b > 0: "a + bi" 
a != 0, b < 0: "a - |b|i" 
a != 0, b == 0: "a" 

私はこれを持っており、それが動作:

public override string ToString() { 
      if (this.real == 0) { 
       if (this.imaginary == 0) return "0"; 
       else return this.imaginary.ToString() + "i"; 
      } 
      else { 
       if (this.imaginary == 0) return this.real.ToString(); 
       else if(this.imaginary > 0) return this.real.ToString() + " + " + this.imaginary.ToString() + "i"; 
       else return this.real.ToString() + " - " + (this.imaginary * -1).ToString() + "i"; 
      } 
     } 

はクリーナーがありますが、これを行う方法?たぶん、より少ない条件で、おそらくより少ないケースで。

+2

[CodeReview](http://codereview.stackexchange.com/)。 – Sinatr

+2

if()文を削除するだけで、else節はすでに必要な処理を行います。 –

+0

私は0 + 3iのようなものは欲しくない、私はその出力を3iにしたいと思う。 –

答えて

0

public override string ToString() 
{ 
    if (this.real != 0 && this.imaginary > 0) return this.real.ToString() + " + " + this.imaginary.ToString() + "i"; 
    if (this.real != 0 && this.imaginary < 0) return this.real.ToString() + " - " + (-1 * this.imaginary).ToString() + "i"; 
    if (this.real != 0 && this.imaginary == 0) return this.real.ToString(); 
    if (this.imaginary != 0) return this.imaginary.ToString() + "i";  
    return "0";  
} 
+1

実際、これは実数で失敗すると思います。 + 0iの場合は0を返します –

+0

戻り値 "0"を変更した場合、 this.real.ToString();を返します。それは完全に動作します –

+0

私は、虚数部が1ならば、私たちは1iではなくiを表示しなければならないことを認識しています。私は、虚数成分の出力のすべてのインスタンスを、虚数成分が1の場合に ""を返す3値で置き換えることによってこれを処理します –

0

私は、アンディTAWのロジックを取った最後のケースを固定し、そしてb =±1、私もBを表示したくない場合は、ケースをカバーするために、いくつかの三元系を追加しました。

public override string ToString() { 
      if (this.real != 0 && this.imaginary > 0) return this.real.ToString() + " + " + ((this.imaginary == 1)?"":this.imaginary.ToString()) + "i"; 
      else if (this.real != 0 && this.imaginary < 0) return this.real.ToString() + " - " + ((this.imaginary == -1)?"":(-1 * this.imaginary).ToString()) + "i"; 
      else if (this.imaginary != 0) return ((this.imaginary == 1)?"":((this.imaginary == -1)?"-":this.imaginary.ToString())) + "i"; 
      else return this.real.ToString(); 
     }