zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    mongodb单机搭建
    elasticsearch-6.2.3单机搭建
    zookeeper集群搭建
    JavaScript高级程序设计-读书笔记(6)
    JavaScript高级程序设计-读书笔记(5)
    JavaScript高级程序设计-读书笔记(4)
    JavaScript高级程序设计-读书笔记(3)
    JavaScript高级程序设计-读书笔记(2)
    JavaScript高级程序设计-读书笔记(1)
    activity通过流程实例id动态获取流程图并展示在jsp页面上
  • 原文地址:https://www.cnblogs.com/zcl843264327/p/10009467.html
Copyright © 2011-2022 走看看