很經典又基本的一個面試題了,新手基本都會掉進去的坑,還是沒有自己的變成思想,哈哈.....
其實主要就是考慮一下使用面向對象和接口,以及計算器的可擴展性,話不多說:
接口:
//運算類接口
public interface Operator {
//獲取結果
public double getResult(double num1,double num2);
}
運算的實現類:
//加法運算
public class AddOperator implements Operator {
@Override
public double getResult(double num1, double num2) {
return num1+num2;
}
}
//除法
public class DivOperator implements Operator {
@Override
public double getResult(double num1, double num2) {
if(num2!=0){
return num1*num2;
}else{
System.out.println("除數不能為0");
return 0;
}
}
}
其他運算類似
運算工廠:
//創建運算類工廠
public class OperatorFactory {
//返回運算類對象
public static Operator getOperator(String oper){
if(oper.equals("+")){
return new AddOperator();
}else if(oper.equals("-")){
return new SubOperator();
}else if(oper.equals("*")){
return new MulOperator();
}else if(oper.equals("/")){
return new DivOperator();
}else{
System.out.println("目前不支持這種操作");
return null;
}
}
}
主函數測試:
//使用工廠模式開發一個簡單計算器
public class CaclTest {
public static void main(String[] args) {
System.out.println("請輸入第一個數字:");
Scanner scanner=new Scanner(System.in);
String num1 = scanner.nextLine();
System.out.println("請輸入運算符(+-*/):");
String oper = scanner.nextLine();
System.out.println("請輸入第二個數字:");
String num2 = scanner.nextLine();
//通過工廠獲取運算類
Operator operator = OperatorFactory.getOperator(oper);
if(operator!=null){
if(isDouble(num1) && isDouble(num2)){
double result = operator.getResult(Double.parseDouble(num1), Double.parseDouble(num2));
System.out.println("結果是:"+result);
}else{
System.out.println("請輸入正確的數字!");
}
}
}
//判斷浮點數(double和float)
private static boolean isDouble(String str) {
if (null == str || "".equals(str)) {
return false;
}
Pattern pattern = Pattern.compile("^[0-9]+(.[0-9]+)?$");//數字,包括整數和浮點
return pattern.matcher(str).matches();
}
}
主要考慮一下可能遇到的異常就行了,這里如果以后要增加運算的話,需要改一下工廠類,並添加一個具體運算實現類,想想也挺麻煩的,哈哈
