由键盘输入两个复数,通过四则运算,加减乘除算出结果。
package 复数运算;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ComplexOperation {
JFrame jframe;
JPanel jp1,jp2,jp3,jp4;
JLabel jl1,jl2,jl3;
JTextField jt1,jt2;
JButton jbtn1,jbtn2,jbtn3,jbtn4,jbtn5,jbtn6;
public void go(){
jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();
jp4 = new JPanel();
jp1.setBackground(Color.YELLOW);
jp2.setBackground(Color.PINK);
jp3.setBackground(Color.GREEN);
jp4.setBackground(Color.CYAN);
jl1 = new JLabel("输入第一个复数: ");
jl2 = new JLabel("输入第二个复数: ");
jl3 = new JLabel("运 算 结 果");
jl1.setFont(new Font("Dialog",Font.BOLD,16));
jl2.setFont(new Font("Dialog",Font.BOLD,16));
jl3.setFont(new Font("Dialog",Font.BOLD,16));
jt1 = new JTextField(18);
jt2 = new JTextField(18);
jbtn1 = new JButton("+");
jbtn2 = new JButton("-");
jbtn3 = new JButton("*");
jbtn4 = new JButton("/");
jbtn5 = new JButton("清 除");
jbtn6 = new JButton("退 出");
JFrame jframe = new JFrame("复数运算");
jframe.setSize(400,220);
jframe.setLocationRelativeTo(null);//使窗口显示到屏幕中央
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setVisible(true);
jframe.setLayout(new GridLayout(4, 1));
jframe.add(jp1);
jp1.add(jl1);
jp1.add(jt1);
jframe.add(jp2);
jp2.add(jl2);
jp2.add(jt2);
jframe.add(jp3);
jp3.add(jl3);
jframe.add(jp4);
jp4.add(jbtn1);
jp4.add(jbtn2);
jp4.add(jbtn3);
jp4.add(jbtn4);
jp4.add(jbtn5);
jp4.add(jbtn6);
/**
* 退出按钮注册事件
*/
jbtn6.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO 自动生成的方法存根
System.exit(0);
}
});
/**
* 清除按钮注册事件
*/
jbtn5.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
jt1.setText(null);
jt2.setText(null);
jl3.setText("运 算 结 果");
}
});
/**
* + 按钮注册事件
*/
jbtn1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
//trim()是去掉字符串中间的空格
CompleNumber x = new CompleNumber(jt1.getText().trim());
CompleNumber y = new CompleNumber(jt2.getText().trim());
CompleNumber z = CompleNumber.add(x,y);
jl3.setText(z + "");
}
});
/**
* - 按钮注册事件
*/
jbtn2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO 自动生成的方法存根
CompleNumber x = new CompleNumber(jt1.getText().trim());
CompleNumber y = new CompleNumber(jt2.getText().trim());
CompleNumber z = CompleNumber.sub(x,y);
jl3.setText(z + "");
}
});
/**
* * 按钮注册事件
*/
jbtn3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
CompleNumber x = new CompleNumber(jt1.getText().trim());
CompleNumber y = new CompleNumber(jt2.getText().trim());
CompleNumber z = CompleNumber.mul(x,y);
jl3.setText(z + "");
}
});
/**
* / 按钮注册事件
*/
jbtn4.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
CompleNumber x = new CompleNumber(jt1.getText().trim());
CompleNumber y = new CompleNumber(jt2.getText().trim());
CompleNumber z = CompleNumber.div(x,y);
jl3.setText(z + "");
}
});
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
ComplexOperation co = new ComplexOperation();
co.go();
}
}
package 复数运算;
public class CompleNumber {
/*定义复数的实部和虚部,其中real是实部,imaginary是虚部*/
public double real;
public double imaginary;
public CompleNumber(){}
public CompleNumber(String s) {
// TODO 自动生成的构造函数存根
int x;
String y;
String real = null;
String imaginary = null;
if(s.contains("i")){
/*indexOf() 返回 String 对象内第一次出现子字符串的字符位置。*/
x = s.indexOf("i");
/*substring() 方法返回的子串包括 start 处的字符,但不包括 stop 处的字符。*/
int x1 = s.substring(0,x).indexOf("+");
int x2 = s.substring(x,s.length()).indexOf("+");
int y1 = s.substring(0,x).indexOf("-");
int y2 = s.substring(x,s.length()).indexOf("-");
/**
* 检索i前面字符串的符号,i前面的符号有四种情况:
*(1)i前有加号也有减号。
*(2)i前没有加号也没有减号。
*(3)i前只有加号,没有减号。
*(4)i前只有减号,没有加号。
*/
if(!s.substring(0,x).contains("+") && !s.substring(0,x).contains("-")){
imaginary = s.substring(0,x);
real = s.substring(x+1,s.length());
}
if(s.substring(0,x).contains("+") && !s.substring(0,x).contains("-")){
imaginary = s.substring(x1,x);
real = s.substring(0,x1);
}
if(s.substring(0,x).contains("+") && s.substring(0,x).contains("-")){
imaginary = s.substring(x1,x);
real = s.substring(0,x1);
}
if(!s.substring(0,x).contains("+") && s.substring(0,x).contains("-")){
imaginary = s.substring(y1,x);
if(s.substring(x,s.length()).contains("+"))
real = s.substring(x2+1,s.length());
else if(s.substring(x,s.length()).contains("-"))
real = s.substring(y2,s.length());
else
real = s.substring(0,y1);
}
this.real = Double.parseDouble(real);
this.imaginary = Double.parseDouble(imaginary);
}
}
public CompleNumber(double a,double b){
real = a;
imaginary = b;
}
public double getReal(){
return real;
}
public double getImaginary(){
return imaginary;
}
public void setReal(double mReal){
real = mReal;
}
public void setImaginary(int mImaginary){
imaginary = mImaginary;
}
public static CompleNumber add(CompleNumber x, CompleNumber y) {
// TODO 自动生成的方法存根
CompleNumber CN = new CompleNumber();
CN.real = x.real+y.real;
CN.imaginary = x.imaginary+y.imaginary;
return CN;
}
public static CompleNumber sub(CompleNumber x, CompleNumber y) {
// TODO 自动生成的方法存根
CompleNumber CN = new CompleNumber();
CN.real = x.real-y.real;
CN.imaginary = x.imaginary-y.imaginary;
return CN;
}
public static CompleNumber mul(CompleNumber x, CompleNumber y) {
// TODO 自动生成的方法存根
CompleNumber CN = new CompleNumber();
CN.real = x.real*y.real-x.imaginary*y.imaginary;
CN.imaginary = x.imaginary*y.real+y.imaginary*x.real;
return CN;
}
public static CompleNumber div(CompleNumber x, CompleNumber y) {
// TODO 自动生成的方法存根
CompleNumber CN = new CompleNumber();
CN.real = (x.real*y.real+x.imaginary*y.imaginary)
/(y.real*y.real+y.imaginary*y.imaginary);
CN.imaginary = (-x.real*y.imaginary+x.imaginary*y.real)
/(y.real*y.real+y.imaginary*y.imaginary);
return CN;
}
public String toString(){
return ("("+real+(imaginary<0 ? "-"+imaginary*(-1) : "+"+imaginary )+"i"+")");
}
}