java将复数字符串虚部实部分离,并实现加减运算
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将复数字符串虚部实部分离,并实现加减运算的更多相关文章
- Java实现 LeetCode 592 分数加减运算(纯体力活)
592. 分数加减运算 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数 ...
- JAVA日期加减运算
1.用java.util.Calender来实现 Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()) ...
- Java对日期Date类进行加减运算,年份加减,月份加减
import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date; public class Da ...
- Java对日期Date类进行日期加减运算,年份加减,月份加减
package com.cy; import java.security.InvalidParameterException; import java.text.ParseException; imp ...
- 【转】Java对日期Date类进行加减运算,年份加减,月份加减
import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date; public class Date ...
- 转 Java对日期Date类进行加减运算一二三
请移步,https://blog.csdn.net/hacker_lees/article/details/74351838 ,感谢博主分享
- Java对日期Date类进行加减运算一二三
转载大神 https://blog.csdn.net/hacker_lees/article/details/74351838
- js与java正则表达式处理字符串问题
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则的代码.合理使用正则表达式确实会为程序员省去很多字 ...
- 7.Java中的字符串
1.String的特性 特性一:不可变性 String s=new String("yangyun") s=s.toUpperCase(); 这里的s,s占用的空间是不一样的(地址 ...
随机推荐
- intel汇编笔记
另一篇汇编学习笔记AT&T Assembly on Linux (linux下) mov ax,bx bx到ax 读数据过程:cpu通过地址线发送地址a,控制线向存储器发送读命令,存 ...
- xe5 firemonkey关闭应用程序
在FMX中,由Activity替代了Form的概念,虽然TForm类仍然存在,但MainForm通过关闭函数无法结束程序,使用Application.Terminate均无效,调整为: uses ...
- 用C实现OOP面向对象编程(1)
如摘要所说,C语言不支持OOP(面向对象的编程).并这不意味着我们就不能对C进行面向对象的开发,只是过程要复杂许多.原来以C++的许多工作,在C语言中需我们手动去完成. 博主将与大家一起研究一下如下用 ...
- 判断当前进程是否以管理员权限运行(AllocateAndInitializeSid后,用CheckTokenMembership与AdministratorsGroup进行比较,和Delphi的那个例子还有点不一样)
在Win7下(Vista以上的...)有时某些操作就是会让人郁闷 开启了UAC的话,得以管理员权限运行才不会出现Access is denied... 但是,程序又不是非得什么时候都用那破管理员权限的 ...
- 小抄:选择 Unity 的对象生命周期管理员
Unity 框架提供了数种生命周期管理员,各有相同和相异之处.刚开始接触时,难免头昏. 制作这张小抄,只是为了要帮助自己理解和记忆.如果你也用 Untiy,或可参考看看. 文字說明: Transien ...
- PHP网站开发方案
一. 开发成员 a)项目主管 b)页面美工c)页面开发 d)服务端程序开发e)系统与数据管理f)测试与版本控制 二. 网站组开发简明流程 三. 开发工具与环境 a) 服务器配置i. WEB服务器: F ...
- CrossOver for Mac v18.5 中文破解版下载-可以安装Windows软件
CrossOver for Mac v18.5 中文破解版: http://h5ip.cn/kADD Crossover Mac 破解版是Mac 和 Windows 系统之间的兼容工具.使 Mac 操 ...
- Spring Boot2(三):使用Spring Boot2集成Redis缓存
前言 前面一节总结了SpringBoot实现Mybatis的缓存机制,但是实际项目中很少用到Mybatis的二级缓存机制,反而用到比较多的是第三方缓存Redis. Redis是一个使用ANSI C编写 ...
- ABP开发框架前后端开发系列---(12)配置模块的管理
一般来说,一个系统或多或少都会涉及到一些系统参数或者用户信息的配置,而ABP框架也提供了一套配置信息的管理模块,ABP框架的配置信息,必须提前定义好配置的各项内容,然后才能在系统中初始化或者通过接口查 ...
- 曹工说Tomcat2:自己撸一个简易Tomcat Digester
一.前言 框架代码其实也没那么难,大家不要看着源码就害怕,现在去看 Tomcat 3.0的代码,保证还是看得懂一半,照着撸一遍基本上很多问题都能搞定了.这次我们就模拟 Tomcat 中的 Digest ...