【问题标题】:Result based on UserInput基于用户输入的结果
【发布时间】:2013-11-12 20:49:55
【问题描述】:

我一直在学习枚举和 switch 语句,我有以下代码

我不想通过代码运行参数,然后编译它以查看结果,我希望用户在终端和 +,x,/,- 中输入数字并在终端中返回结果,我该如何完成这个

public class MathCalculatorTest2_0 {
MathFunctions1_0 mathFunction1;
public MathCalculatorTest2_0 (MathFunctions1_0 mathFunction1) {
    this.mathFunction1 = mathFunction1;
}

public void DoMath(double digit1, double digit2) {
    double mathResult = 0;
    switch (mathFunction1) {
        case MULTIPLY:
            mathResult = digit1*digit2;
            break;  
        case DIVIDE:
            mathResult = digit1/digit2;
            break;
        case ADD:
            mathResult = digit1+digit2;
            break;
        case SUBTRACT:
            mathResult = digit1-digit2;
            break;
        default:
            System.out.println("Incorrect arithmatic character, please insert a correct arithmatic character between the two numbers (x, /, +, -)");
    }
    System.out.println(mathResult);
}

public static void main(String[] args) {
    if (args.length < 3) {
        System.out.println("Please correct syntax");
    } else {
        double firstDigit = Double.parseDouble(args[0]);
        String userInput1 = args[1];
        double secondDigit = Double.parseDouble(args[2]);
        MathCalculatorTest2_0 C;
        switch (userInput1) {
            case "x":
                C = new MathCalculatorTest2_0(MathFunctions1_0.MULTIPLY);
                C.DoMath(firstDigit, secondDigit);
                break;
            case "/":
                C = new MathCalculatorTest2_0(MathFunctions1_0.DIVIDE);
                C.DoMath(firstDigit, secondDigit);
                break;
            case "+":
                C = new MathCalculatorTest2_0(MathFunctions1_0.ADD);
                C.DoMath(firstDigit, secondDigit);
                break;
            case "-":
                C = new MathCalculatorTest2_0(MathFunctions1_0.SUBTRACT);
                C.DoMath(firstDigit, secondDigit);
                break;
            default: System.out.println("Please insert correct arithmatic character.");
        }
    }
}

}

public enum MathFunctions1_0 {
MULTIPLY, DIVIDE, ADD, SUBTRACT

}

【问题讨论】:

  • 首先看看这个:docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html 第二个:不要命名以大写字母开头的变量。第三:给出有意义的名字(这里是类名/实例名)
  • 不管怎样,从方法、设计等开始,有很多不好的地方。
  • 嗨,谢谢你的 cmets,但是我对 Java 很陌生,我不是计算机科学专业的,我从来没有上过课......所以我不知道如何更好设计任何东西......请不要那么挑剔。另外,这如何帮助我让用户输入 10x10 并得到 100 的结果?

标签: java methods arguments calculator


【解决方案1】:

首先,您的代码中有很多不好的地方,这可能不是它应该看起来的最佳版本,但无论如何它要好得多。最好使用 switch 运算符,并且可以为需要执行的操作声明一些静态最终变量。 声明这个静态方法和字段将包含一些数学工具的类:

public class MathTool {
    public static final int PLUS_OPERATION = 0;

    public static final int MINUS_OPERATION = 1;

    public static final int MULTIPLY_OPERATION = 2;

    public static final int DIVIDE_OPERATION = 3;

    public static double doMathOperation(double digit1, double digit2, int operation) {
        switch (operation) {
        case PLUS_OPERATION: return digit1 + digit2;
        case MINUS_OPERATION: return digit1 - digit2;
        case MULTIPLY_OPERATION: return digit1 * digit2;
        case DIVIDE_OPERATION: return digit1 / digit2;
        default: return 0;
        }
    }
}

然后你可以像这样调用它的方法:

    public static void main(String[] args) {
        double operationResult = MathTool.doMathOperation(5, 3, MathTool.MULTIPLY_OPERATION);
        System.out.println(operationResult);
    }

在 Java 中,您应该使用小写作为变量名的首字母。

编辑:

对于来自控制台的用户输入,请使用 Scanner,如下所示:

Scanner sc = new Scanner(System.in);
int i = sc.nextInt();

【讨论】:

  • 嗨,感谢您的回复,但我如何从命令行获取用户输入?我真的是 Java 新手,我不太了解,这是我写的第一个应用程序......那么用户如何能够输入数字来执行某种数学运算,例如乘 10x10 ???
  • Yuri - 在几乎所有情况下,枚举都优于 public-static-final-ints
  • 在这种情况下是否使用枚举取决于您。我更喜欢仅在其中包含一些逻辑时才使用枚举。
猜你喜欢
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多