java將復數字符串虛部實部分離,並實現加減運算


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM