实名感谢尚梦川大佬教会我正则表达式!!!!!!!!!!!!!!!!!!!!!!!!!!
输入的必须是正确答案,主要是尝试正则表达式。 看不懂的童邪慎用。优化也不是特别好,但是看懂了比较舒服。
有错误欢迎指正
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Complextest {
public float real,vir; public static int count=0; public static String Input() { Scanner in = new Scanner(System.in); count++; System.out.println("请输入第"+count+"个复数:"); String res= in.next(); return res; } public Complextest (String str) { if(str.equals("i")||str.equals("+i")) { this.real=0; this.vir =1; } else if(str.equals("-i")) { this.real=0; this.vir =-1; } else{ String a = "^([-+]?)(\\d+|\\d+\\.\\d+)$";//只有实部的匹配 String bi = "^([-+]?)(\\d+|\\d+\\.\\d+)?(i+)$";//只虚部的匹配 String a_bi = "^([-+]?)(\\d+|\\d+\\.\\d+)([-+]+)(\\d+|\\d+\\.\\d+)(i+)$";//都有 String a_i = "^([-+]?)(\\d+|\\d+\\.\\d+)([-+]+)(i+)$"; Pattern fora = Pattern.compile(a); Pattern forbi = Pattern.compile(bi); Pattern fora_bi = Pattern.compile(a_bi); Pattern fora_i = Pattern.compile(a_i); Matcher toa= fora.matcher(str); Matcher tobi= forbi.matcher(str); Matcher toa_bi= fora_bi.matcher(str); Matcher toa_i= fora_i.matcher(str); if(toa_i.find())//([-+]?)(\\\\d+|\\\\d+\\\\.\\\\d+)([-+]+)(i+) { this.real = Float.parseFloat(toa_i.group(1)+toa_i.group(2)); this.vir = 1; if(toa_i.group(3).equals("-")) { this.vir*=-1; } } if(toa.find())//只匹配实部 { this.real = Float.parseFloat(toa.group(0)); this.vir = 0; }else if(tobi.find())//只匹配虚部"([-+]?)(\\d+|\\d+\\.\\d+)(i+)"; { this.real=0; this.vir=Float.parseFloat(tobi.group(1)+tobi.group(2)); } if(toa_bi.find())//([-+]?)(\\d+|\\d+\\.\\d+)([-+]+)(\\d+|\\d+\\.\\d+)(i+) { this.real = Float.parseFloat(toa_bi.group(1)+toa_bi.group(2)); if(toa_bi.group(4).length()==0) { this.vir=1; if(toa_bi.group(3)=="+") { this.vir*=-1; } }else { this.vir=Float.parseFloat(toa_bi.group(3)+toa_bi.group(4)); } } } System.out.print("你输入的复数:"); sayResult(this.real,this.vir); } public void add(Complextest other)//加法 { float sum_Real,sum_Vir; sum_Real=this.real+other.real; sum_Vir=this.vir+other.vir; System.out.print("和:"); sayResult(sum_Real,sum_Vir); } public void lenth(Complextest other)//长度 { float x_len,y_len; x_len=this.real-other.real; y_len=this.vir-other.vir; System.out.println("长度是"+String.format("%.2f", Math.sqrt(x_len*x_len+y_len*y_len))); } public boolean equls(Complextest other) { System.out.print("是否相等:"); return this==other||Math.abs(this.real-other.real)<0.001&&Math.abs(this.vir-other.vir)<0.001; } public void diff(Complextest other)//减法 { float diff_Real,diff_Vir; diff_Real=this.real-other.real; diff_Vir=this.vir-other.vir; System.out.print("差:"); sayResult(diff_Real,diff_Vir); } public void sayResult(float Real_,float Vir_) { StringBuffer put = new StringBuffer(); String str=String.valueOf(Real_); if(Real_!=0)//实部存在 { put.append(str); if(Vir_!=0)//等于0就不管 { if(Vir_>0) { if(Vir_==1)//虚部为1 { put.append("+i"); }else { put.append("+"+Vir_+"i"); } } else if(Vir_<0) { if(Vir_==-1)//虚部为-1 { put.append("-i"); }else { put.append(Vir_+"i"); } } } }else//不存在实部 { if(Vir_!=0)//只有虚部 { if(Vir_==-1) { put.append("-i"); }else if(Vir_==1) { put.append("i"); }else { put.append(Vir_+"i"); } }else//虚部都没有 { put.append("0"); } } System.out.println(put); } public static void main(String[] args) { String str; str = Input(); Complextest first = new Complextest(str); str = Input(); Complextest second = new Complextest(str); first.add(second); first.diff(second); first.lenth(second); System.out.println(first.equls(second)); }
}