java字符串構造復數
將字符串分解為復數的實部和虛部
定義一個復數類,數據成員有實部和虛部,根據傳參不同構造方法重載,並定義復數的加減方法,以及toString方法。有難度的便是用字符串構造復數了,需要將字符串分解,還要分清正負,分清實部在前還是虛部在前,輸出的時候為 a+bi 或 a+(-bi)。
在此只附上字符串構造和toString部分的代碼,字符串構造沒有考慮 j 作虛部的情況,若此代碼還有未考慮的情況,望指正。
1 public Complex(String s) 2 { 3 //將字符串前面的空格去掉,並且定義空字符串分別存儲實部和虛部部分
4 s = s.trim(); 5 String str_real = "",str_imag = ""; 6 //分別存儲'+'或'-',和'i'的下標,以便將實部與虛部分離
7 int index_ = 0, index_i = 0; 8 //判斷字符串是否為空
9 if(s != null && !"".equals(s)) 10 { 11 //字符串中只有數字,表明是一個實數
12 if(!s.contains("i")) 13 { 14 set(Double.valueOf(s), 0); 15 } 16 //字符串是復數,可能存在 a+bi 和 bi+a 的形式,所以我們只需記錄第二個加減號以及i的位置即可
17 else if( (s.contains("+")||s.contains("-") ) && s.contains("i")) 18 { 19 for(int i = 0;i < s.length();i++) 20 { 21 if(s.charAt(i) == '+' || s.charAt(i) == '-') 22 index_ = i; 23 else if(s.charAt(i) == 'i') 24 index_i = i; 25 } 26 //a+bi 形式 27 //從頭到index_(不含index_)為實部部分,從index_(含)到index_i為虛部部分
28 if(index_ < index_i) 29 { 30 str_real = s.substring(0, index_); 31 str_imag = s.substring(index_, index_i); 32 if("".equals(str_real)) 33 str_real = "0"; 34 if("".equals(str_imag)) 35 str_imag = "0"; 36 set(Double.valueOf(str_real), Double.valueOf(str_imag)); 37 } 38 //bi+a 形式 39 //從頭到index_i(不含index_i)為虛部部分,從index_i + 1(含)到末為實部部分
40 else if(index_ > index_i) 41 { 42 str_imag = s.substring(0, index_i); 43 str_real = s.substring(index_i+1); 44 set(Double.valueOf(str_real), Double.valueOf(str_imag)); 45 } 46 } 47 //由於將實部與虛部分離的時候,將各自前面的正負號也一並加到了各自的字符串中, 48 //所以在使用Double.valueOf()將字符串轉化為double類型的時候,已經考慮的正負號,故在此沒有對正負做情況區分
49 } 50 }
做toString方法時,首先判斷是否只含有虛部或實部,實數不用輸出 i .(避免出現 a+0i 或者 0+bi 的情況)
public String toString() //轉換成字符串形式輸出
{ if(this.getReal() == 0) //實部為0,只有虛部
return this.getImagi()+"i"; if(this.getImagi() == 0) //虛部為0,只有實部
return String.valueOf(this.getReal()); if(this.getImagi() > 0) //虛部為正
return this.getReal()+"+"+this.getImagi()+"i"; if(this.getImagi() < 0) //虛部為負
return this.getReal()+"+("+this.getImagi()+"i)"; return null; }
轉載請注明來源:https://www.cnblogs.com/zcl843264327/p/10009467.html