用java实现复数的加减乘除运算(修改版1)

1.背景

 

前两天为了赶进度,自己很快实现了,但是很快有无私的网友指出了其中一个显然的错误:没有考虑除数为0的情况。虽然java初学,不过错就是错,没有啥理由。自己以后写老师作业,会尽可能深进去,把已经自学过的内容体现出来,而不是跟老师上课的内容来写代码。在此基础上,尽可能保证快速解决问题。

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

 

2.具体代码(附注释)

 

 

[java][/java] view plaincopy

  1. package Four;
  2. /**
  3.  * @author Kun Sun
  4.  * @Date: 2013.10.17
  5.  */
  6. public class Complex { // 复数类
  7.     double real;  // 实部
  8.     double image; // 虚部
  9.     Complex(double real,double image){ // 带参数的构造方法
  10.         this.real = real;
  11.         this.image = image;
  12.     }
  13.     public Complex() {
  14.         // TODO Auto-generated constructor stub
  15.     }
  16.     public double getReal() {
  17.         return real;
  18.     }
  19.     public void setReal(double real) {
  20.         this.real = real;
  21.     }
  22.     public double getImage() {
  23.         return image;
  24.     }
  25.     public void setImage(double image) {
  26.         this.image = image;
  27.     }
  28.     Complex add(Complex a){ // 复数相加
  29.         double real2 = a.getReal();
  30.         double image2 = a.getImage();
  31.         double newReal = real + real2;
  32.         double newImage = image + image2;
  33.         Complex result = new Complex(newReal,newImage);
  34.         return result;
  35.     }
  36.     Complex sub(Complex a){ // 复数相减
  37.         double real2 = a.getReal();
  38.         double image2 = a.getImage();
  39.         double newReal = real – real2;
  40.         double newImage = image – image2;
  41.         Complex result = new Complex(newReal,newImage);
  42.         return result;
  43.     }
  44.     Complex mul(Complex a){ // 复数相乘
  45.         double real2 = a.getReal();
  46.         double image2 = a.getImage();
  47.         double newReal = real*real2 – image*image2;
  48.         double newImage = image*real2 + real*image2;
  49.         Complex result = new Complex(newReal,newImage);
  50.         return result;
  51.     }
  52.     Complex div(Complex a){ // 复数相除
  53.         double real2 = a.getReal();
  54.         double image2 = a.getImage();
  55.         double newReal = (real*real2 + image*image2)/(real2*real2 + image2*image2);
  56.         double newImage = (image*real2 – real*image2)/(real2*real2 + image2*image2);
  57.         Complex result = new Complex(newReal,newImage);
  58.         return result;
  59.     }
  60.     public void print(){ // 用于格式化输出
  61.         if(image > 0){
  62.             System.out.println(real + ” + ” + image + “i”);
  63.         }else if(image < 0){
  64.             System.out.println(real + “” + image + “i”);
  65.         }else{
  66.             System.out.println(real);
  67.         }
  68.     }
  69.     // 封装了具体运算,主要为对输入进行转换,对输出封装
  70.     public static void talk(String data1_1,String data1_2,String data2_1,String data2_2,String operation){
  71.         // 以下语句为格式转换
  72.         double dat1_1 = Double.parseDouble(data1_1); // 把string型实部转为double型
  73.         double dat1_2 = Double.parseDouble(data1_2.substring(0,data1_2.length()-1));// 把去除”i”的string型虚部转为double型
  74.         double dat2_1 = Double.parseDouble(data2_1);// 把string型实部转为double型
  75.         double dat2_2 = Double.parseDouble(data2_2.substring(0,data2_2.length()-1));// 把去除”i”的string型虚部转为double型
  76.         Complex num1 = new Complex(dat1_1,dat1_2);
  77.         Complex num2 = new Complex(dat2_1,dat2_2);
  78.         Complex result;
  79.         int a,b;
  80.         if(operation.equals(“+”)){ // 两数相加
  81.             result = num1.add(num2);
  82.             result.print();
  83.         }
  84.         if(operation.equals(“-“)){ // 两数相减
  85.             result = num1.sub(num2);
  86.             result.print();
  87.         }
  88.         if(operation.equals(“*”)){ // 两数相乘
  89.             result = num1.mul(num2);
  90.             result.print();
  91.         }
  92.         if(operation.equals(“/”)){ // 两数相除
  93.             if(num2.real * num2.real + num2.image*num2.image != 0){
  94.                 result = num1.div(num2);
  95.                 result.print();
  96.             }else{
  97.                 System.out.println(“运算出错,除数运算中除数不能为0,请用户重新输入!”);
  98.             }
  99.         }
  100.     }
  101. }

 

 

 

[java][/java] view plaincopy

  1. package Four;
  2. import java.util.Scanner;
  3. /**
  4.  * @author Kun Sun
  5.  * @Date: 2013.10.17
  6.  */
  7. public class MainClass { // 用于测试复数类
  8.     /**
  9.      * @param args
  10.      */
  11.     public static void main(String[] args) {
  12.         // TODO Auto-generated method stub
  13.         Complex complex = new Complex();
  14.         // 以下测试中的talk()中的解释为
  15.         // talk(string data1_1,string data1_2,string data2_1,string data2_2,string operation);
  16.         // data1_1,data1_2依次为第一个复数的实部和虚部
  17.         // data2_1,data2_2依次为第二个复数的实部和虚部
  18.         // operation为两个复数运算的操作符,每种测试都做加减乘除
  19.         System.out.println(“测试1:————————-“);  // 一般测试
  20.         complex.talk(“5”, “4i”, “3”, “6i”, “+”);
  21.         complex.talk(“5”, “4i”, “3”, “6i”, “-“);
  22.         complex.talk(“5”, “4i”, “3”, “6i”, “*”);
  23.         complex.talk(“5”, “4i”, “3”, “6i”, “/”);
  24.         System.out.println(“\n测试2:————————-“); // 包含负数测试
  25.         complex.talk(“-2″,”4i”, “5”, “-8i”,”+”);
  26.         complex.talk(“-2″,”4i”, “5”, “-8i”,”-“);
  27.         complex.talk(“-2″,”4i”, “5”, “-8i”,”*”);
  28.         complex.talk(“-2″,”4i”, “5”, “-8i”,”/”);
  29.         System.out.println(“\n测试3:————————-“); // 包含小数测试
  30.         complex.talk(“-1.2″,”3.1i”,”4.3″,”-6.5i”,”+”);
  31.         complex.talk(“-1.2″,”3.1i”,”4.3″,”-6.5i”,”-“);
  32.         complex.talk(“-1.2″,”3.1i”,”4.3″,”-6.5i”,”*”);
  33.         complex.talk(“-1.2″,”3.1i”,”4.3″,”-6.5i”,”/”);
  34.         System.out.println(“\n测试4:————————-“); // 包含除数为0测试
  35.         complex.talk(“5”, “4i”, “0”, “0i”, “+”);
  36.         complex.talk(“5”, “4i”, “0”, “0i”, “-“);
  37.         complex.talk(“5”, “4i”, “0”, “0i”, “*”);
  38.         complex.talk(“5”, “4i”, “0”, “0i”, “/”);
  39.     }
  40. }

 

 

 

3.测试结果截图

标签