java字符串构造复数

将字符串分解为复数的实部和虚部

定义一个复数类,数据成员有实部和虚部,根据传参不同构造方法重载,并定义复数的加减方法,以及toString方法。有难度的便是用字符串构造复数了,需要将字符串分解,还要分清正负,分清实部在前还是虚部在前,输出的时候为 a+bi 或 a+(-bi)。

在此只附上字符串构造和toString部分的代码,字符串构造没有考虑 j 作虚部的情况,若此代码还有未考虑的情况,望指正。

 public Complex(String s)
{
//将字符串前面的空格去掉,并且定义空字符串分别存储实部和虚部部分
s = s.trim();
String str_real = "",str_imag = "";
//分别存储'+'或'-',和'i'的下标,以便将实部与虚部分离
int index_ = 0, index_i = 0;
//判断字符串是否为空
if(s != null && !"".equals(s))
{
//字符串中只有数字,表明是一个实数
if(!s.contains("i"))
{
set(Double.valueOf(s), 0);
}
//字符串是复数,可能存在 a+bi 和 bi+a 的形式,所以我们只需记录第二个加减号以及i的位置即可
else if( (s.contains("+")||s.contains("-") ) && s.contains("i"))
{
for(int i = 0;i < s.length();i++)
{
if(s.charAt(i) == '+' || s.charAt(i) == '-')
index_ = i;
else if(s.charAt(i) == 'i')
index_i = i;
}
//a+bi 形式
//从头到index_(不含index_)为实部部分,从index_(含)到index_i为虚部部分
if(index_ < index_i)
{
str_real = s.substring(0, index_);
str_imag = s.substring(index_, index_i);
if("".equals(str_real))
str_real = "0";
if("".equals(str_imag))
str_imag = "0";
set(Double.valueOf(str_real), Double.valueOf(str_imag));
}
//bi+a 形式
//从头到index_i(不含index_i)为虚部部分,从index_i + 1(含)到末为实部部分
else if(index_ > index_i)
{
str_imag = s.substring(0, index_i);
str_real = s.substring(index_i+1);
set(Double.valueOf(str_real), Double.valueOf(str_imag));
}
}
//由于将实部与虚部分离的时候,将各自前面的正负号也一并加到了各自的字符串中,
//所以在使用Double.valueOf()将字符串转化为double类型的时候,已经考虑的正负号,故在此没有对正负做情况区分
}
}

做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

java将复数字符串虚部实部分离,并实现加减运算的更多相关文章

  1. Java实现 LeetCode 592 分数加减运算(纯体力活)

    592. 分数加减运算 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数 ...

  2. JAVA日期加减运算

    1.用java.util.Calender来实现 Calendar calendar=Calendar.getInstance();      calendar.setTime(new Date()) ...

  3. Java对日期Date类进行加减运算,年份加减,月份加减

      import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date; public class Da ...

  4. Java对日期Date类进行日期加减运算,年份加减,月份加减

    package com.cy; import java.security.InvalidParameterException; import java.text.ParseException; imp ...

  5. 【转】Java对日期Date类进行加减运算,年份加减,月份加减

    import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date; public class Date ...

  6. 转 Java对日期Date类进行加减运算一二三

    请移步,https://blog.csdn.net/hacker_lees/article/details/74351838 ,感谢博主分享

  7. Java对日期Date类进行加减运算一二三

    转载大神 https://blog.csdn.net/hacker_lees/article/details/74351838

  8. js与java正则表达式处理字符串问题

    在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则的代码.合理使用正则表达式确实会为程序员省去很多字 ...

  9. 7.Java中的字符串

    1.String的特性 特性一:不可变性 String s=new String("yangyun") s=s.toUpperCase(); 这里的s,s占用的空间是不一样的(地址 ...

随机推荐

  1. 两种加载dll的方式

    通过链接lib文件加载dll的话,使用过程中没法动态切换 通过loadlibrary函数动态加载的话,可以动态切换

  2. 深入探索ScrollWindow

    最近做WIN32 API开发时发现对ScrollWindow的一些工作原理并不是太清楚,于是做了相关研究,记载下来和大家共同学习. 首先在WM_CREATE中获取系统字符的宽度和高度 case WM_ ...

  3. 在不开启事件循环的线程中使用QTimer(QThread::run函数自带事件循环,在构造函数里创建线程,是一种很有意思的线程用法) good

    引入 QTimer是Qt自带的定时器类,QTimer运行时是依赖于事件循环的,简单来说,在一个不开启事件循环(未调用exec() )的线程中,QTimer是无法使用的.通过分析Qt源码可发现,调用QT ...

  4. 深入浅出RPC——浅出篇(转载)

    本文转载自这里是原文 近几年的项目中,服务化和微服务化渐渐成为中大型分布式系统架构的主流方式,而 RPC 在其中扮演着关键的作用. 在平时的日常开发中我们都在隐式或显式的使用 RPC,一些刚入行的程序 ...

  5. Windows服务(system权限)程序显示界面与用户交互,Session0通知Session1里弹出对话框(真的很牛) good

    源码资源下载:http://download.csdn.net/detail/stony1980/4512984   1.VC2008中编写“Windows服务”(Windows Service)程序 ...

  6. QtStaticBuildScript(会有这么容易)

    https://github.com/dankrusi/QtStaticBuildScript

  7. 用 jQuery.getJSON() 跨域请求 JSON 数据

    $.getJSON()可以理解为特殊形式的$.ajax(),手册里的说明好复杂,这里只记录一下用到的跨域请求. 先说在同一域名下,js发送数据到php,php返回JSON数据: $.getJSON(' ...

  8. IT安全军火库-转

    全球有260万信息安全专业人士,渗透测试工具是他们“安全军火库”中最常使用的装备,但直到最近,可用的渗透测试工具才丰富起来,但这也带来一个问题,挑选合适的渗透测试工具成了一件麻烦事,一个最简单的方法就 ...

  9. react中使用高德地图的原生API

    干货,无话 1.react-create-app,创建新react项目 2.npm install react-amap,引入高德地图的封装 3.编写组件index.js import React f ...

  10. 前端Vue基础学习

    Vue基础 对与vue的简洁明了的干货分享,适合小白学习观看,如果有笔误或者想了解更多的,请给笔者留言,后续会继续分享,从零开始的vue相关经验 1.创建vue实例 <div id=" ...