2016-07-26 26 views
-1

我有一個複雜的數字類與覆蓋ToString輸出。顯示覆雜的數字

有五例爲複數的結構,每個都需要輸出格式稍有不同:

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

如果更改返回「0」;返回this.real.ToString();它完美的工作 –

+0

我意識到,如果虛部是1,那麼我們也應該只顯示我,而不是1i。我通過用三元組來替換虛部的輸出的每個實例來處理這個問題,如果虛構成部分是1 –

0

我把安迪比都的邏輯,固定後一種情況,並增加了一些ternaries涵蓋其中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(); 
     }