1、 程序包含的模块
a) 用户输入
b) 输入检测
c) 字符串处理

正则表达式:(以下形式为合法输入) a+bi a-bi -a+bi -a-bi a -a bi -bi(支持浮点数)
匹配的正则表达式:[-]?\\d*\\.?\\d*[\\+|-]?\\d*\\.?\\d*i?

d) 复数计算

2、源码

package cpxnum_calculator;import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;public class CpxNum {double _real;//实部double _imag;//虚部CpxNum() {}CpxNum(String str) {//初始化复数//※这里需要复制一份字符串,以免在对符号进行提取的时候损伤了原来的字符串String string = str;int indexfirst = string.indexOf("-");int indexlast = string.lastIndexOf("-");int count = Tools.fuhaocount(string);boolean start_fu = string.startsWith("-");//复数是否以-号开始boolean end_i = string.endsWith("i");//复数是否有虚部String strings[] = str.split("\\+|-|i");//分离实部和虚部if (end_i == false) {//只有实部,没有虚部  a -a_real = Double.parseDouble(string);} else {//有虚部if (count == 2) {//有两个符号,有实部和虚部if (start_fu == true) {//实部为负数 -a+bi -a-bi_real = -Double.parseDouble(strings[1]);if (indexlast != indexfirst) {//虚部为负数 -a-bi_imag = -Double.parseDouble(strings[2]);} else {//虚部为正数 -a+bi_imag = Double.parseDouble(strings[2]);}}} else {//一个符号,有虚部if (start_fu == true) {//开头为'-' -bi_imag = -Double.parseDouble(strings[1]);} else {// a+bi a-bi biif (strings.length == 1) {//bi_imag = Double.parseDouble(strings[0]);} else {//a+bi a-biif (indexlast != -1) {//a-bi_real = Double.parseDouble(strings[0]);_imag = -Double.parseDouble(strings[1]);} else {//a+bi_real = Double.parseDouble(strings[0]);_imag = Double.parseDouble(strings[1]);}}}}}}void print() {//注意:此处若漏掉空格,编译器会认为是相加的数值System.out.println(this._real + " + " + this._imag + "i");}}class CpxCalculator {public CpxNum cplus(CpxNum... c) {CpxNum cpxNum = new CpxNum();for (int i = 0; i < c.length; i++) {cpxNum._real = cpxNum._real + c[i]._real;cpxNum._imag = cpxNum._imag + c[i]._imag;}System.out.print("以上" + c.length + "个复数相加的结果为:");cpxNum.print();return cpxNum;}public CpxNum cmilus(CpxNum... c) {CpxNum cn = new CpxNum();cn._real = c[0]._real;cn._imag = c[0]._imag;for (int i = 0; i < c.length - 1; i++) {cn._real = cn._real - c[i+1]._real;cn._imag = cn._imag - c[i+1]._imag;}System.out.print("以上" + c.length + "个复数相减的结果为:");cn.print();return cn;}public CpxNum cmultiply(CpxNum... c) {CpxNum cn = new CpxNum();double real = c[0]._real;cn._real = c[0]._real;cn._imag = c[0]._imag;for (int i = 0; i < c.length - 1; i++) {//            这里不能连在一起算,前一步的结果会影响到后面
//            cn._real = cn._real * c[i + 1]._real - cn._imag * c[i + 1]._imag;
//            cn._imag = cn._real * c[i + 1]._imag + cn._imag * c[i + 1]._real;real = real * c[i + 1]._real - cn._imag * c[i + 1]._imag;cn._imag = cn._real * c[i + 1]._imag + cn._imag * c[i + 1]._real;}System.out.print("以上" + c.length + "个复数相乘的结果为:");cn._real = real;cn.print();return cn;}public CpxNum cdivide(CpxNum... c) {CpxNum cn = new CpxNum();double real = c[0]._real;cn._real = c[0]._real;cn._imag = c[0]._imag;for (int i = 0; i < c.length - 1; i++) {real = (cn._real * c[i + 1]._real + cn._imag * c[i + 1]._imag) /(c[i + 1]._real * c[i + 1]._real + c[i + 1]._imag * c[i + 1]._imag);cn._imag = (cn._imag * c[i + 1]._real - cn._real * c[i + 1]._imag) /(c[i + 1]._real * c[i + 1]._real + c[i + 1]._imag * c[i + 1]._imag);}System.out.print("以上" + c.length + "个复数相除的结果为:");cn._real = real;cn.print();return cn;}
}class CpxNumTest {public static void main(String[] args) {Scanner reader = new Scanner(System.in);List<String> strlist = new LinkedList<>();CpxCalculator calculator = new CpxCalculator();int flag = 1;System.out.println("当输入0的时候结束输入");System.out.print("是否开始使用复数计算器(1/0):");flag = reader.nextInt();if (flag == 0) {System.out.println("程序已停止运行");return;}while (flag != 0) {System.out.print("请输入以i为虚部符号的一个复数:");String inputstr = reader.next();while (Tools.inputtest(inputstr) == false) {//复数检测System.out.print("输入的复数不合格,请重新输入:");inputstr = reader.next();}strlist.add(inputstr);System.out.print("是否需要继续输入复数(1/0):");flag = reader.nextInt();if (flag == 0) {System.out.println("您刚刚输入的复数为:");break;}}CpxNum[] cpxNums = new CpxNum[strlist.size()];//将刚刚输入的字符串生成复数对象for (int i = 0; i < strlist.size(); i++) {cpxNums[i] = new CpxNum(strlist.get(i));cpxNums[i].print();}calculator.cplus(cpxNums);calculator.cmilus(cpxNums);calculator.cmultiply(cpxNums);calculator.cdivide(cpxNums);}
}

3、结果

复数计算器 Java 正则表达式相关推荐

  1. 分数计算器java报告_20182307 2019-2020-1 《数据结构与面向对象程序设计》实验四报告...

    20182307 2019-2020-1 <数据结构与面向对象程序设计>实验四报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 陆彦杰 学号:20182307 实验 ...

  2. java正则表达式替换特殊字符_使用正则表达式替换报表名称中的特殊字符(推荐)...

    正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表通常被用来检索.替换那些符合某个模式(规则)的文 ...

  3. java正则表达式课程_通过此免费课程学习正则表达式

    java正则表达式课程 by Beau Carnes 通过博卡恩斯 通过此免费课程学习正则表达式 (Learn Regular Expressions with this free course) & ...

  4. java正则表达式 1,Java正则表达式学习(1)

    Java正则表达式学习(一) 1.什么是正则表达式: 正则表达式(regular expressions) 是一种描述字符串集的方法,它是以字符串集中各种字符串的公有特征为依据的. 正则表达式可以用于 ...

  5. 孪生素数 java代码_科学网—孪生素数猜想——利用 Java + 正则表达式 输出孪生素数对 - 马廷灿的博文...

    查了一下资料,发现正则表达式竟然可以用来检查素数(http://coolshell.cn/articles/2704.html)!(由于工作需要,几年前开始接触.利用正则表达式,给工作带了很大方便,也 ...

  6. java正则表达式的用法_Java 正则表达式的使用

    Java 正则表达式的使用 1:正则表达式语法大全 字符 说明 \ 将下一字符标记为特殊字符.文本.反向引用或八进制转义符.例如,"n"匹配字符"n".&quo ...

  7. Java正则表达式--Matcher.group函数的用法

    https://www.cnblogs.com/jiafuwei/p/6080984.html Java正则表达式--Matcher.group函数的用法 原来,group是针对()来说的,group ...

  8. java 正则表达式入门(一)

    Java正则表达式 定义:具有特定规则的一种表达式语言. 作用:专门用于操作字符串,操作意味着(校验,截取).且可以简化我们对字符串的操作方式 比如,验证手机号码 如果没有正则表达式我们的过程就应该是 ...

  9. bigint对应java什么类型_「JAVA」从格式化输出到扫描输入,深究Java正则表达式匹配之道

    字符串是不可变的 字符串是不可变的,也就是说当字符串的内容发生改变的时候,会创建一个新的String对象:但是如果内容没有发生改变的时候,String类的方法会返回原字符串对象的引用. 而正则表达式往 ...

  10. Java 正则表达式使用详解

    今天研究开源项目,哆啦A梦,研究里面显示log 的原理. 后来发现,用到了正则表达式.觉得很有用,就捡起来,重新研究一下. 学习思路指导: 每一门学问,最好的深入学习方法,是去其官网,研究其说明文档. ...

最新文章

  1. 【JQuery】on/off 绑定事件和解绑事件
  2. pcie和usb哪个带宽高_了解数字示波器采样率和模拟带宽的规格
  3. 西门子安装未找到ssf文件_V5.3安装时显示NO SSF FILE FOUND对话框,我该怎么解决啊? 谢谢!-工业支持中心-西门子中国...
  4. 数学和古典诗词的意境
  5. vue keepalive 动态设置缓存
  6. jemeter python接口自动化测试平台_python接口自动化测试之request
  7. Jsp+Servlet+Mysql实现的在线图书商城源码
  8. OCP-1Z0-042-V12.39-47题
  9. 看完了张小龙的 2359 条饭否日记
  10. 小技巧:办公邮箱怎么登录foxmail?outlook如何群发单显?
  11. 农民工看完都学会了!Android开发岗还不会这些问题,跳槽薪资翻倍
  12. 资源、角色、用户、岗位的关系(工作中用到的)
  13. as5300g2 nas软件功能_硬件与软件齐飞,首款支持2.5G网络的品牌NAS-华芸AS-5202T测评体验...
  14. 研一一整年都在搞深度学习,研二醒悟打算转开发
  15. C++详解:枚举类型 --- enum | Xunlan_blog
  16. Vitis 软件平台安装
  17. MAC地址、IP地址以及ARP协议详细讲解
  18. bs4+phantomjs爬取安居客二手房信息
  19. 6.7.0  ESX host上clone server时,最好server上没有镜像
  20. 记忆力游戏(C#版)

热门文章

  1. 罗德里格旋转公式——旋转轴的解法之一
  2. 【找工作必读】来自IT公司速查手册的各大IT公司薪资
  3. mysql phpmyadmin 报403错误_phpmyadmin出现403错误怎么办?
  4. 计算机开机自检时,电脑开机启动时出现DHCP自检怎么办
  5. 计算机密码技术发展,密码技术的分类
  6. linux C之srand函数
  7. 机器学习中的忒修斯之船:那些“愚弄”专家的著名悖论
  8. 中顶访客登记管理系统
  9. Microsoft office 2013安装图解
  10. 《牛奶可乐经济学》读书笔记