/**
* @version 1.0
* 初版代码,只能实现功能,问题很多
*/
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
MyUtils.print("请输入数字a:");
String a = scanner.nextLine();
MyUtils.print("请选择运算符号(+,-,*,/):");
String sign = scanner.nextLine();
MyUtils.print("请输入数字b:");
String b = scanner.nextLine();
String result = "";
if ("+".equals(sign)) {
result = String.valueOf(Double.parseDouble(a) + Double.parseDouble(b));
} else if ("-".equals(sign)) {
result = String.valueOf(Double.parseDouble(a) - Double.parseDouble(b));
} else if ("*".equals(sign)) {
result = String.valueOf(Double.parseDouble(a) * Double.parseDouble(b));
} else if ("/".equals(sign)) {
result = String.valueOf(Double.parseDouble(a) / Double.parseDouble(b));
}
MyUtils.print("结果是:" + result);
}
}
/**
* @version 1.1
* 修改:<br>
* 1.规范变量名
* 2.对除数0做异常判断
* 问题:<br>
* 1.没有面向对象
* 2.没有业务逻辑和界面分离
* 3.扩展性差,可维护差
*/
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
MyUtils.print("请输入数字A:");
String strNumberA = scanner.nextLine();
MyUtils.print("请选择运算符号(+,-,*,/):");
String strOperate = scanner.nextLine();
MyUtils.print("请输入数字B:");
String strNumberB = scanner.nextLine();
String result = "";
try {
switch (strOperate) {
case "+":
result = String.valueOf(Double.parseDouble(strNumberA) + Double.parseDouble(strNumberB));
break;
case "-":
result = String.valueOf(Double.parseDouble(strNumberA) - Double.parseDouble(strNumberB));
break;
case "*":
result = String.valueOf(Double.parseDouble(strNumberA) * Double.parseDouble(strNumberB));
break;
case "/":
if (Double.compare(Double.parseDouble(strNumberB), 0) == 0) {
throw new IllegalArgumentException("除数不能为0");
}
result = String.valueOf(Double.parseDouble(strNumberA) / Double.parseDouble(strNumberB));
break;
}
MyUtils.print("结果是:" + result);
} catch (IllegalArgumentException e) {
MyUtils.print(e.getMessage());
}
}
}
/**
* @version 1.2
* 修改:<br>
* 1.业务与界面分离
* 2.对运算过程进行封装
* 问题:<br>
* 1.如果要增加运算功能,需要修改Operation类,违背了开闭原则
*/
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
MyUtils.print("请输入数字A:");
String strNumberA = scanner.nextLine();
MyUtils.print("请选择运算符号(+,-,*,/):");
String strOperate = scanner.nextLine();
MyUtils.print("请输入数字B:");
String strNumberB = scanner.nextLine();
try {
String result = String.valueOf(Operation.getResult(Double.parseDouble(strNumberA),
Double.parseDouble(strNumberB), strOperate));
MyUtils.print(result);
} catch (Exception e) {
MyUtils.print("输入错误:" + e.getMessage());
}
}
}
/**
* 封装运算,获得结果
*/
public class Operation {
public static double getResult(double numberA, double numberB, String operate) {
double result = 0;
switch (operate) {
case "+":
result = numberA + numberB;
break;
case "-":
result = numberA - numberB;
break;
case "*":
result = numberA * numberB;
break;
case "/":
if (Double.compare(numberB, 0) == 0) {
throw new IllegalArgumentException("除数为0");
}
result = numberA / numberB;
break;
}
return result;
}
}
/**
* @version 1.3
*/
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
MyUtils.print("请输入数字A:");
String strNumberA = scanner.nextLine();
MyUtils.print("请选择运算符号(+,-,*,/):");
String strOperate = scanner.nextLine();
MyUtils.print("请输入数字B:");
String strNumberB = scanner.nextLine();
try {
Operation operation = OperationFactory.createOperate(strOperate);
operation.setNumberA(Double.parseDouble(strNumberA));
operation.setNumberB(Double.parseDouble(strNumberB));
MyUtils.print("结果是:" + operation.getResult());
} catch (Exception e) {
MyUtils.print(e.getMessage());
}
}
}
/**
* 工厂类
*/
public class OperationFactory {
public static Operation createOperate(String operate) {
Operation operation=null;
switch (operate) {
case "+":
operation = new OperationAdd();
break;
case "-":
operation = new OperationSub();
break;
case "*":
operation = new OperationMul();
break;
case "/":
operation = new OperationDiv();
break;
}
return operation;
}
}
/**
* 抽象的操作类
*/
public abstract class Operation {
private double numberA;
private double numberB;
/**
* 获得运算结果
*/
public abstract double getResult();
public double getNumberA() {
return numberA;
}
public void setNumberA(double numberA) {
this.numberA = numberA;
}
public double getNumberB() {
return numberB;
}
public void setNumberB(double numberB) {
this.numberB = numberB;
}
}
/**
* 加法
*/
public class OperationAdd extends Operation {
@Override
public double getResult() {
return getNumberA() + getNumberB();
}
}
/**
* 减法
*/
public class OperationSub extends Operation {
@Override
public double getResult() {
return getNumberA() - getNumberB();
}
}
/**
* 乘法
*/
public class OperationMul extends Operation {
@Override
public double getResult() {
return getNumberA() * getNumberB();
}
}
/**
* 除法
*/
public class OperationDiv extends Operation {
@Override
public double getResult() {
if (Double.compare(getNumberB(), 0) == 0) {
throw new IllegalArgumentException("除数不能为0");
}
return getNumberA() / getNumberB();
}
}