标签:
1.设计思路
1) 在原有的程序的基础上加上判断运算是否正确的函数;
(1)因为输出的算式中涉及到分数的运算,所以要写一个分数运算的类,进行调用;
(2)在判断的过程中首先先判断为哪种运算,然后判断结果;
(3) 在判断的函数中要设置两个函数,一个为输出的算式,另一个为输入的结果;
(4)在原有的基础上,在主程序中将算式设置为输出一个,然后输入结果判断完成后再输出另一个算式;
2)分数计算的函数,
(1)分数计算首先将分子分母从算式中截出来,进行分子分母的运算;
(2)约分计算:取分子分母的最大公约数,除以最大公约数,得到的分子分母就是约分后的分子分母;
2.程序代码:
package 四则运算2; import java.util.Random; import java.util.Scanner; public class FourOperation { public static void main(String args[]) { Yunsuan a=new Yunsuan(); @SuppressWarnings("resource") Scanner scanner=new Scanner(System.in); String temp; /*.................................................................................................*/ System.out.println("请选择计算数量:"); int n=scanner.nextInt(); //输入输出算式的个数 /*...................................................................................................*/ System.out.println("请选择以下条件:是否需要乘除法 "); System.out.println("请输入:y1/n1"); String i1=scanner.next(); //输入是否需要乘法 /*....................................................................................................*/ System.out.println("选择数值范围:1. 0-100, 2. 0-200"); int i2=scanner.nextInt(); if(i2==1) { i2=100; } /*选择数值范围,其中i2是为了后边isOrNotMultiplicationAndDivision(4,i2,i3,i4) 调用,进行取范围运算*/ if(i2==2) { i2=200; } /*.....................................................................................................*/ System.out.println("是否选择加减是有负数:y2/n2"); String i3=scanner.next(); //选择是否加减有负数 /*.......................................................................................................*/ System.out.println("是否选择除法有余数:y3/n3"); String i4=scanner.next(); //选择除法是否有余数 /*............................................................................................*/ if(i1.equals("y1")) { for(int i=0;i<n;i++) { temp=a.isOrNotMultiplicationAndDivision(4,i2,i3,i4); if(temp=="") { n=n+1; } else { System.out.println(temp); String result=scanner.next(); a.check(temp, result); } } } if(i1.equals("n1")) { for(int i=0;i<n;i++) { temp=a.isOrNotMultiplicationAndDivision(2,i2,i3,i4); if(temp=="") { n=n+1; //求算式的运算 } else { System.out.println(temp); String result=scanner.next(); a.check(temp, result); } } } } }/*......................................................................................................*/ class Yunsuan{ private String firstNumber; private String secondNumber; private String number; char fuhao[]={‘+‘,‘-‘,‘*‘,‘/‘}; private fenshu fen=new fenshu(); public String randomNumber(int i)//求随机数的函数 { Random random=new Random(); int temp=Math.abs(random.nextInt()%2); if(temp==1) { number="("+String.valueOf(Math.abs(random.nextInt()%i))+"/"+String.valueOf(Math.abs(random.nextInt()%i)+")"); } else { int f=random.nextInt(); number=String.valueOf(Math.abs(f%i)); } return number; } public String addtion(int i,String s)//求加法的函数 { firstNumber=randomNumber(i); secondNumber=randomNumber(i); double firstNumberToInteger = 0.0 ; double secondNumberToInteger = 0.0; if(firstNumber.contains("/"))//判断是否为分数,如果是要进行计算成小数便于后边判断是否为负数 { String firstNumberToInteger1=firstNumber.substring(1, firstNumber.indexOf("/")); String firstNumberToInteger2=firstNumber.substring(firstNumber.indexOf("/")+1,firstNumber.length()-1); firstNumberToInteger=(Double.parseDouble(firstNumberToInteger1))/(Double.parseDouble(firstNumberToInteger2)); firstNumber="("+fen.yuefen(firstNumber)+")"; } else { firstNumberToInteger=Double.parseDouble(firstNumber); } if(secondNumber.contains("/"))//同上 { String secondNumberToInteger1=secondNumber.substring(1, secondNumber.indexOf("/")); String secondNumberToInteger2=secondNumber.substring(secondNumber.indexOf("/")+1,secondNumber.length()-1); secondNumberToInteger=(Double.parseDouble(secondNumberToInteger1))/(Double.parseDouble(secondNumberToInteger2)); secondNumber="("+fen.yuefen(secondNumber)+")"; } else { secondNumberToInteger=Double.parseDouble(secondNumber); } if(s.equals("y2")) { return firstNumber+"+"+secondNumber+"="; } if(s.equals("n2")) { double n=firstNumberToInteger+secondNumberToInteger; if(n<0) { return ""; } else { return firstNumber+"+"+secondNumber+"="; } } return ""; } public String subtraction(int i,String s)//求减法的函数 { firstNumber=randomNumber(i); secondNumber=randomNumber(i); firstNumber=randomNumber(i); secondNumber=randomNumber(i); double firstNumberToInteger = 0.0 ; double secondNumberToInteger = 0.0; if(firstNumber.contains("/"))//同加法 { String firstNumberToInteger1=firstNumber.substring(1, firstNumber.indexOf("/")); String firstNumberToInteger2=firstNumber.substring(firstNumber.indexOf("/")+1,firstNumber.length()-1); firstNumberToInteger=(Double.parseDouble(firstNumberToInteger1))/(Double.parseDouble(firstNumberToInteger2)); firstNumber="("+fen.yuefen(firstNumber)+")"; } else { firstNumberToInteger=Double.parseDouble(firstNumber); } if(secondNumber.contains("/"))//同加法 { String secondNumberToInteger1=secondNumber.substring(1, secondNumber.indexOf("/")); String secondNumberToInteger2=secondNumber.substring(secondNumber.indexOf("/")+1,secondNumber.length()-1); secondNumberToInteger=(Double.parseDouble(secondNumberToInteger1))/(Double.parseDouble(secondNumberToInteger2)); secondNumber="("+fen.yuefen(secondNumber)+")"; } else { secondNumberToInteger=Double.parseDouble(secondNumber); } if(s.equals("y2")) { return firstNumber+"-"+secondNumber+"="; } if(s.equals("n2")) { double n=firstNumberToInteger-secondNumberToInteger; if(n<0) { return ""; } else { return firstNumber+"-"+secondNumber+"="; } } return ""; } public String multiplication(int i)//求乘法的函数 { firstNumber=randomNumber(i); secondNumber=randomNumber(i); if(firstNumber.contains("/")) { firstNumber="("+fen.yuefen(firstNumber)+")"; } if(secondNumber.contains("/")) { secondNumber="("+fen.yuefen(secondNumber)+")"; } return firstNumber+"*"+secondNumber+"="; } public String division(int i,String s)//求除法的函数 { firstNumber=randomNumber(i); secondNumber=randomNumber(i); if(firstNumber.contains("/")) { firstNumber="("+fen.yuefen(firstNumber)+")"; } if(secondNumber.contains("/")) { secondNumber="("+fen.yuefen(secondNumber)+")"; } if(s=="y3") { return firstNumber+"/"+secondNumber+"="; } if(s=="n3") { if(firstNumber.contains("/")||secondNumber.contains("/")) { return firstNumber+"/"+secondNumber+"="; } else { if((Integer.parseInt(firstNumber))%(Integer.parseInt(secondNumber))==0) { return firstNumber+"/"+secondNumber+"="; } else { return ""; } } } return ""; } public String isOrNotMultiplicationAndDivision(int i,int j,String s1,String s2)//进行运算的函数 { Yunsuan b=new Yunsuan(); String str = null; Random random=new Random(); int k=random.nextInt(); int demp=Math.abs(k%i); switch(fuhao[demp]) { case ‘+‘: { str=b.addtion(j,s1); }break; case ‘-‘: { str=b.subtraction(j,s1); }break; case ‘*‘: { str=b.multiplication(j); }break; case ‘/‘: { str=b.division(j,s2); } } return str; } public void check(String s,String input)//判断正确的函数 { fenshu fen=new fenshu(); int time1=0,time2=0; char cha[]=s.toCharArray(); for(int i=0;i<cha.length;i++) { if(cha[i]==‘/‘) { time1++; } if(cha[i]==‘(‘) { time2++; } } if(s.contains("+"))//判断加法计算是否正确 { String oneNumber=s.substring(0, s.indexOf("+")); String twoNumber=s.substring(s.indexOf("+")+1,s.length()-1); if(oneNumber.contains("/")) { } else { oneNumber="("+oneNumber+"/1)"; } if(twoNumber.contains("/")) {} else { twoNumber="("+twoNumber+"/1)"; } if(fen.yuefen(fen.jiafa(oneNumber, twoNumber)).equals(input)) { System.out.println("结果正确!"); } else { System.out.println("结果错误!"); } } if(s.contains("-"))//判断减法计算是否正确 { String oneNumber=s.substring(0, s.indexOf("-")); String twoNumber=s.substring(s.indexOf("-")+1,s.length()-1); if(oneNumber.contains("/")) { } else { oneNumber="("+oneNumber+"/1)"; } if(twoNumber.contains("/")) {} else { twoNumber="("+twoNumber+"/1)"; } if(fen.yuefen(fen.jianfa(oneNumber, twoNumber)).equals(input )) { System.out.println("结果正确!"); } else { System.out.println("结果错误!"); } } if(s.contains("*"))//判断乘法计算是否正确 { String oneNumber=s.substring(0, s.indexOf("*")); String twoNumber=s.substring(s.indexOf("*")+1,s.length()-1); if(oneNumber.contains("/")) { } else { oneNumber="("+oneNumber+"/1)"; } if(twoNumber.contains("/")) {} else { twoNumber="("+twoNumber+"/1)"; } if(fen.yuefen(fen.chengfa(oneNumber, twoNumber)).equals(input)) { System.out.println("结果正确!"); } else { System.out.println("结果错误!"); } } if(time1>time2)//判断除法计算是否正确 { char ch[]=s.toCharArray(); int time=0; for(int i=0;i<s.length();i++) { if(ch[i]==‘/‘) { time++; } if(time==2) { String oneNumber=s.substring(0, i); String twoNumber=s.substring(i+1,s.length()-1); if(oneNumber.contains("/")) { } else { oneNumber="("+oneNumber+"/1)"; } if(twoNumber.contains("/")) {} else { twoNumber="("+twoNumber+"/1)"; } if(fen.yuefen(fen.chufa(oneNumber, twoNumber)).equals(input)) { System.out.println("结果正确!"); } else { System.out.println("结果错误!"); } }break; } } } } class fenshu//分数计算的类 { public String yuefen(String one)//分数的约分 { int oneNumber1=stringtoInteger1(one); int oneNumber2=stringtoInteger2(one); int temp; if(oneNumber1>=oneNumber2) { temp=oneNumber2; } else { temp=oneNumber1; } for(int i=2;i<=temp;i++) { if(oneNumber1%i==0&&oneNumber2%i==0) { oneNumber1=oneNumber1/i; oneNumber2=oneNumber2/i; temp=temp/i; i=1; } } if(oneNumber2==1) { return String.valueOf(oneNumber1); } else { return (String.valueOf(oneNumber1)+"/"+String.valueOf(oneNumber2)); } } public String jiafa(String one,String two)//分数加法计算 { int fenzi,fenmu; int oneNumber1=stringtoInteger1(one); int oneNumber2=stringtoInteger2(one); int twoNumber1=stringtoInteger1(two); int twoNumber2=stringtoInteger2(two); if(oneNumber2==twoNumber2) { fenzi=oneNumber1+twoNumber1; fenmu=oneNumber2; } else { fenmu=oneNumber2*twoNumber2; fenzi=oneNumber1*twoNumber2+oneNumber2*twoNumber1; } return (String.valueOf(fenzi)+"/"+String.valueOf(fenmu)); } public String jianfa(String one,String two)//分数减法计算 { int fenzi,fenmu; int oneNumber1=stringtoInteger1(one); int oneNumber2=stringtoInteger2(one); int twoNumber1=stringtoInteger1(two); int twoNumber2=stringtoInteger2(two); if(oneNumber2==twoNumber2) { fenzi=oneNumber1-twoNumber1; fenmu=oneNumber2; } else { fenmu=oneNumber2*twoNumber2; fenzi=oneNumber1*twoNumber2-oneNumber2*twoNumber1; } return (String.valueOf(fenzi)+"/"+String.valueOf(fenmu)); } public String chengfa(String one,String two)//分数的乘法计算 { int fenzi,fenmu; int oneNumber1=stringtoInteger1(one); int oneNumber2=stringtoInteger2(one); int twoNumber1=stringtoInteger1(two); int twoNumber2=stringtoInteger2(two); fenzi=oneNumber1*twoNumber1; fenmu=oneNumber2*twoNumber2; return (String.valueOf(fenzi)+"/"+String.valueOf(fenmu)); } public String chufa(String one,String two)//分数的除法计算 { int fenzi,fenmu; int oneNumber1=stringtoInteger1(one); int oneNumber2=stringtoInteger2(one); int twoNumber1=stringtoInteger1(two); int twoNumber2=stringtoInteger2(two); fenzi=oneNumber1*twoNumber2; fenmu=oneNumber2*twoNumber1; return (String.valueOf(fenzi)+"/"+String.valueOf(fenmu)); } public int stringtoInteger1(String s)//数与字符串转换 { if(s.contains("(")) {} else { s="("+s+")"; } String oneNumberToInteger1=s.substring(1, s.indexOf("/")); int oneNumber1=Integer.parseInt(oneNumberToInteger1); return oneNumber1; } public int stringtoInteger2(String s) { if(s.contains("(")) {} else { s="("+s+")"; } String oneNumberToInteger2=s.substring(s.indexOf("/")+1,s.length()-1); int oneNumber2=Integer.parseInt(oneNumberToInteger2); return oneNumber2; } }
3.运行结果截图
4
.
标签:
原文地址:http://www.cnblogs.com/wanggang-java/p/5322998.html