将重复的if-else语句修改为更干净的代码

Ala*_*boi 2 java if-statement

我正在制作一个计算器桂.有没有办法让这个代码看起来更干净,没有重复行.

double num1, num2, ans, doub;
num1 = Double.parseDouble(FirstInput.getText());
num2 = Double.parseDouble(SecondInput.getText());
oper = (Operator.getText());

if(oper.equals("+")){
    ans = num1 + num2;
    doub = Math.round(ans * 100000.0) / 100000.0;
    if(doub == (int) ans){
        Answer.setText(Integer.toString((int) ans));
    } else{
        Answer.setText(Double.toString(doub));
    }
}
if(oper.equals("-")){
    ans = num1 - num2;
    doub = Math.round(ans * 100000.0) / 100000.0;
    if(doub == (int) ans){
        Answer.setText(Integer.toString((int) ans));
    } else{
        Answer.setText(Double.toString(doub));
    }
}
if(oper.equals("/")){
    ans = num1 / num2;
    doub = Math.round(ans * 100000.0) / 100000.0;
    if(doub == (int) ans){
        Answer.setText(Integer.toString((int) ans));
    } else{
        Answer.setText(Double.toString(doub));
    }
}
if(oper.equals("x")){
    ans = num1 * num2;
    doub = Math.round(ans * 100000.0) / 100000.0;
    if(doub == (int) ans){
        Answer.setText(Integer.toString((int) ans));
    } else{
        Answer.setText(Double.toString(doub));
    }
}
Run Code Online (Sandbox Code Playgroud)

Lin*_*ica 5

使用java-8,你可以通过引入一个接受数字的新方法来使它非常有趣,并且DoubleBinaryOperator:

public void setAnswerText(double num1, double num2, DoubleBinaryOperator operator){
    final double ans = operator.applyAsDouble(num1, num2);
    final double doub = Math.round(ans * 100000.0) / 100000.0;
    if(doub == (int) ans){
        Answer.setText(Integer.toString((int) ans));
    } else{
        Answer.setText(Double.toString(doub));
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用switch语句:

final double num1 = Double.parseDouble(FirstInput.getText());
final double num2 = Double.parseDouble(SecondInput.getText());
final String oper = (Operator.getText());
final DoubleBinaryOperator operator;
switch(oper){
    case "+": 
        operator = (a, b) -> a+b;
        break;
    case "-": 
        operator = (a, b) -> a-b;
        break;
    case "/": 
        operator = (a, b) -> a/b;
        break;
    case "x": 
        operator = (a, b) -> a*b;
        break;
    default:
        throw new UnsupportedOperationException();
}

setAnswerText(num1, num2, operator);
Run Code Online (Sandbox Code Playgroud)

这样,您就可以在switch-statment中找到匹配的运算符,然后使用数字和找到的运算符执行该方法