用java实现复数的加减乘除运算(改进第1次)

1.背景

前两天为了赶速度,自己很快实现了如题java老师布置的作业,并在csdn上写了博客,记录学习过程,原博客链接为:http://blog.csdn.net/u010043538/article/details/12765527。但是很快有无私的网友指出了其中一个显然的错误:没有考虑除数为0的情况。虽然java初学,不过错就是错,没有啥理由。自己以后写老师作业,会尽可能深进去,把已经自学过的内容体现出来,而不是跟老师上课的内容来写代码。在此基础上,尽可能保证快速解决问题。

此次改进修正了错误:没有考虑除数为0的情况。并对程序的封装性做了一定程度的改进。

2.具体代码(附注释)

package Four;

/**

* @author Kun Sun

* @Date: 2013.10.17

*/

public class Complex { // 复数类

double real; // 实部

double image; // 虚部

Complex(double real,double image){ // 带参数的构造方法

this.real = real;

this.image = image;

}

public Complex() {

// TODO Auto-generated constructor stub

}

public double getReal() {

return real;

}

public void setReal(double real) {

this.real = real;

}

public double getImage() {

return image;

}

public void setImage(double image) {

this.image = image;

}

Complex add(Complex a){ // 复数相加

double real2 = a.getReal();

double image2 = a.getImage();

double newReal = real + real2;

double newImage = image + image2;

Complex result = new Complex(newReal,newImage);

return result;

}

Complex sub(Complex a){ // 复数相减

double real2 = a.getReal();

double image2 = a.getImage();

double newReal = real - real2;

double newImage = image - image2;

Complex result = new Complex(newReal,newImage);

return result;

}

Complex mul(Complex a){ // 复数相乘

double real2 = a.getReal();

double image2 = a.getImage();

double newReal = real*real2 - image*image2;

double newImage = image*real2 + real*image2;

Complex result = new Complex(newReal,newImage);

return result;

}

Complex div(Complex a){ // 复数相除

double real2 = a.getReal();

double image2 = a.getImage();

double newReal = (real*real2 + image*image2)/(real2*real2 + image2*image2);

double newImage = (image*real2 - real*image2)/(real2*real2 + image2*image2);

Complex result = new Complex(newReal,newImage);

return result;

}

public void print(){ // 用于格式化输出

if(image > 0){

System.out.println(real + " + " + image + "i");

}else if(image < 0){

System.out.println(real + "" + image + "i");

}else{

System.out.println(real);

}

}

// 封装了具体运算,主要为对输入进行转换,对输出封装

public static void talk(String data1_1,String data1_2,String data2_1,String data2_2,String operation){

// 以下语句为格式转换

double dat1_1 = Double.parseDouble(data1_1); // 把string型实部转为double型

double dat1_2 = Double.parseDouble(data1_2.substring(0,data1_2.length()-1));// 把去除"i"的string型虚部转为double型

double dat2_1 = Double.parseDouble(data2_1);// 把string型实部转为double型

double dat2_2 = Double.parseDouble(data2_2.substring(0,data2_2.length()-1));// 把去除"i"的string型虚部转为double型

Complex num1 = new Complex(dat1_1,dat1_2);

Complex num2 = new Complex(dat2_1,dat2_2);

Complex result;

int a,b;

if(operation.equals("+")){ // 两数相加

result = num1.add(num2);

result.print();

}

if(operation.equals("-")){ // 两数相减

result = num1.sub(num2);

result.print();

}

if(operation.equals("*")){ // 两数相乘

result = num1.mul(num2);

result.print();

}

if(operation.equals("/")){ // 两数相除

if(num2.real * num2.real + num2.image*num2.image != 0){

result = num1.div(num2);

result.print();

}else{

System.out.println("运算出错,除数运算中除数不能为0,请用户重新输入!");

}

}

}

}

package Four;

import java.util.Scanner;

/**

* @author Kun Sun

* @Date: 2013.10.17

*/

public class MainClass { // 用于测试复数类

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Complex complex = new Complex();

// 以下测试中的talk()中的解释为

// talk(string data1_1,string data1_2,string data2_1,string data2_2,string operation);

// data1_1,data1_2依次为第一个复数的实部和虚部

// data2_1,data2_2依次为第二个复数的实部和虚部

// operation为两个复数运算的操作符,每种测试都做加减乘除

System.out.println("测试1:-------------------------"); // 一般测试

complex.talk("5", "4i", "3", "6i", "+");

complex.talk("5", "4i", "3", "6i", "-");

complex.talk("5", "4i", "3", "6i", "*");

complex.talk("5", "4i", "3", "6i", "/");

System.out.println("\n测试2:-------------------------"); // 包含负数测试

complex.talk("-2","4i", "5", "-8i","+");

complex.talk("-2","4i", "5", "-8i","-");

complex.talk("-2","4i", "5", "-8i","*");

complex.talk("-2","4i", "5", "-8i","/");

System.out.println("\n测试3:-------------------------"); // 包含小数测试

complex.talk("-1.2","3.1i","4.3","-6.5i","+");

complex.talk("-1.2","3.1i","4.3","-6.5i","-");

complex.talk("-1.2","3.1i","4.3","-6.5i","*");

complex.talk("-1.2","3.1i","4.3","-6.5i","/");

System.out.println("\n测试4:-------------------------"); // 包含除数为0测试

complex.talk("5", "4i", "0", "0i", "+");

complex.talk("5", "4i", "0", "0i", "-");

complex.talk("5", "4i", "0", "0i", "*");

complex.talk("5", "4i", "0", "0i", "/");

}

}

3.测试结果截图

java实现复数之间加减乘运算_用java实现复数的加减乘除运算(改进第1次)相关推荐

  1. JAVA程序设计:分数加减运算(LeetCode:592)

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

  2. C语言抽象数据类型实现复数的加减乘运算、输入实部虚部输出复数,输入复数输出实部虚部

    运行结果 #include<stdio.h> #include<stdlib.h> //头文件 typedef struct Complex //定义结构体类型Complex ...

  3. db2 日期加减一天_常用SQL系列之(八):列值累计、占比、平均值以及日期运算等...

    本系统为@牛旦教育IT课堂在微头条上发布的内容,为便于查阅,特辑录于此,都是常用SQL基本用法. 前两篇连接: (一):SQL点滴(查询篇):数据库基础查询案例实战 (二):SQL点滴(排序篇):数据 ...

  4. java日期或时间加减(获取前几天或后几天)

    //获取当前日期 java.sql.Date endTime = new java.sql.Date(new java.util.Date().getTime());//当前日期 //减去七天 Cal ...

  5. java计算器如何实现运算_用java编写了一个模拟计算器的界面设计,怎么实现运算功能呢...

    用java编写了一个模拟计算器的界面设计,怎么实现运算功能呢 2020 - 9 - 16 TAG : view sourceprint?import java.awt.BorderLayout; im ...

  6. java打印已经被加载的类_使用URLClassLoader加载类,不会报错,但被加载类中的内容也没有打印出来...

    被加载类和加载类的程序在一个文件夹下: 运行没有任何结果: D:java_exercise>javac URLTest.java D:java_exercise>java URLTest ...

  7. 未能成功加载扩展程序_【JAVA虚拟机(JVM)精髓】09-几种不同的类加载器

    持续更新JVM相关知识,敬请关注: Java虚拟机精髓专栏​zhuanlan.zhihu.com 上一节说了下类加载器和类加载过程.这一节我们看下几种不同的类加载器. JVM支持的类加载器有两类,分别 ...

  8. js日期加减一天_用js进行日期的加减

    如题,开始查了查js的使用文档,但没发现可以直接用的函数,于是就想自己写函数来着,这就要涉及到每个月天数的判断,如果是2月份的话,还要涉及到闰年的判断,虽然不复杂但我想js应该不会这么低级,于是查了下 ...

  9. php简单加减乘除,C++_C 语言简单加减乘除运算,C语言也可以进行加减乘除运算 - phpStudy...

    C 语言简单加减乘除运算 C语言也可以进行加减乘除运算,但是运算符号与数学中的略有不同,见下表. 加法 减法 乘法 除法 求余数 数学 + - × ÷ 无 C语言 + - * / % 加号.减号与数学 ...

  10. java start打开cmd窗口并停住_浅析Java命令执行

    在使用java.lang.Runtime#exec()执行命令时,为何有时候命令前缀需要加cmd /c或者bash -c?今天就来一探究竟! Java执行命令的3种方法 首先了解下在Java中执行命令 ...

最新文章

  1. 利用增强限制条件来求解问题
  2. 财务需要学python-财务人要学Python吗?
  3. SAP S4 HANA-The future is here?
  4. 为什么let在php中报错,PHPlet在Windows下的安装
  5. 反编译中内部类调用外部类成员问题
  6. js获取最近几天的日期(转载)
  7. 单片机里面的CPU使用率是什么鬼?
  8. 获取macos mojave_高仿MacOS教程
  9. 2018年前端星计划等你来报名!
  10. Android手机打造你的PythonJava开发工具!
  11. Android 5.0 双卡信息管理分析
  12. 02.Mirth Connect client API 调用
  13. PAT-1068 万绿丛中一点红
  14. 百度,阿里,搜狐公司社招面试题及总结
  15. Python变量赋值方法
  16. IDEA的介绍基础运用和优化还有各种功能(超级全!!多图!!)
  17. CCleaner科学使用方法
  18. 工作态度-《精要主义》书中的精髓:我们如何践行精要主义,摆脱拥挤不堪的生活?
  19. 复现NC图表:相关性分析气泡图(热图)---同时展示正负调控关系和显著性
  20. 关于石英晶体谐振器可靠性分析

热门文章

  1. Linux-第一篇linux基本认识
  2. what's the 场外交易
  3. SQLPROFILER计算机用户操作数据SQL记录跟踪
  4. 开发前奏曲之添加Android SDK平台工具
  5. c++内存中字节对齐问题详解 【转载】
  6. 20200121每日一句
  7. excel 绘制箱图
  8. Atitit 获取ip的http标头 目录 1.1. REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP 1 1.2.  HTTP_CLIENT_IP 客户ip。握手ip 1 1.3
  9. Atitit 锁的不同层级 app锁 vm锁 os锁 硬件锁 目录 1. 在硬件层面,CPU提供了原子操作、关中断、锁内存总线的机制 1 1.1. test and set指令 1 1.2. 锁内
  10. Atitit 功能扩展法细则条例 目录 1. 界面ui扩展 2 1.1. 使用h5做界面 2 1.2. 自制h5 ide。。简化ui自定义配置 2 2. 业务逻辑扩展 2 2.1. Bpm流程引擎还