1importjava.util.Scanner;23publicclassCaculationTest {45publicstaticvoidmain(String[] args) {67Scanner reader =newScanner(System.in);8doublea, b, result = 0;9StringOperator;10Operation operation =null;1112System.out.PRintln("************************");13System.out.println("* 学号:1308060310 *");14System.out.println("* 班级:网络131班 *");15System.out.println("* 姓名:王朝远 *");16System.out.println("************************");1718TwoFromConsole twoFromConsole =newTwoFromConsole();19a = twoFromConsole.getFirstDoubleFromConsole();//获取第一个数20b = twoFromConsole.getTwoDoubleFromConsole();//获取第二个数2122OperatorFromConsole operatorFromConsole =newOperatorFromConsole();23operator = operatorFromConsole.getOperator();//获取运算符号24do{25if(operator.equals("/") && b == 0) {26System.out.print("除法运算分母不能为0,请重新输入,");27b = twoFromConsole.getTwoDoubleFromConsole();//获取第二个数28continue;29}30
break;31}while(true);3233//获取要运算的对象34operation =Factory.getInstance(operator);35result =operation.getResult(a, b);3637//判断用户是否继续对数运算,如果是继续对数运算,结果的输出方式就不一样,并且让用户选择是否再次计算38if(operator.equals("log")) {3940System.out.println("log" + "(" + b + ")" + a + "=" +result);41}else{42System.out.println(a + operator + b + "=" +result);43}44}45}4647classTwoFromConsole {4849Scanner reader =newScanner(System.in);5051//获取数字的方法的具体实现52publicdoublegetFirstDoubleFromConsole() {5354doublex = 0;55System.out.print("请输入第一个数字:");56do{57doubletemp = 0;58try{59temp =reader.nextDouble();60}catch(Exception e) {61System.out.print("请重新输入第一个数字:");62continue;63}64x =temp;65
break;66}while(true);67returnx;68}6970publicdoublegetTwoDoubleFromConsole() {7172doublex = 0;73System.out.print("请输入第二个数字:");74do{75doubletemp = 0;76try{77temp =reader.nextDouble();78}catch(Exception e) {79System.out.print("请重新输入第二个数字:");80continue;81}82x =temp;83
break;84}while(true);85returnx;86}87}8889/**90* 获取运算符类91*/92classOperatorFromConsole {9394Scanner reader =newScanner(System.in);9596/**97*@return合理的运算符98*/99publicString getOperator() {100System.out.print("请输入运算符:");101102String operator;103booleanb;104do{105operator =reader.nextLine();106b = !(operator.equals("+") || operator.equals("-") || operator.equals("*") || operator.equals("/")107|| operator.equals("log"));108if(b ==true) {109System.out.print("请重新输入运算符:");110}111}while(b);112113returnoperator;114}115}116117/**118* 功能:各个运算的父接口,子类必须实现父接口里面的方法119*/120interfaceOperation {121122doublegetResult(doublex,doubley);123}124125/**126* 实现加法运算的类127*/128classAddimplementsOperation {129130/**131* 重写接口里面的方法,并实现加法功能132*/133@Override134publicdoublegetResult(doublex,doubley) {135//TODO Auto-generated method stub136returnx +y;137}138139}140141/**142* 实现减法运算的类143*/144classSubimplementsOperation {145146/**147* 重写接口里面的方法,并实现减法功能148*/149@Override150publicdoublegetResult(doublex,doubley) {151//TODO Auto-generated method stub152returnx -y;153}154}155156/**157* 实现乘法运算的类158*/159classMulimplementsOperation {160161/**162* 重写接口里面的方法,并实现乘法功能163*/164@Override165publicdoublegetResult(doublex,doubley) {166//TODO Auto-generated method stub167returnx *y;168}169170}171172/**173* 实现除法运算的类174*/175classDivimplementsOperation {176177/**178* 重写接口里面的方法,并实现除法功能179*/180@Override181publicdoublegetResult(doublex,doubley) {182//TODO Auto-generated method stub183returnx /y;184}185186}187188/**189* 实现对数运算的类190*/191classLogarithmimplementsOperation {192193/**194* 重写接口里面的方法,并实现对数运算功能195*/196@Override197publicdoublegetResult(doublex,doubley) {198//TODO Auto-generated method stub199returnMath.log(x) / Math.log(y);//x表示对数,y表示底数200}201202}203204/**205* 生成用户所需要的对象工厂类206*/207classFactory {208209/**210*@paramoperator211* 用户选择的运算212*@return用户所需要的对象213*/214publicstaticOperation getInstance(String operator) {215Operation operation =null;216switch(operator) {217case"+":218operation =newAdd();//实例化加法对象219
break;220case"-":221operation =newSub();//实例化减法对象222
break;223case"*":224operation =newMul();//实例化乘法对象225
break;226case"/":227operation =newDiv();//实例化除法对象228
break;229case"log":230operation =newLogarithm();//实例化对数运算对象231
break;232}233234returnoperation;235}236}