2016-07-26 62 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(); 
     }