首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java中计算结果?

如何在Java中计算结果?
EN

Stack Overflow用户
提问于 2013-10-10 01:13:37
回答 3查看 15.8K关注 0票数 2

我创建这段代码是为了创建随机数和运算符,但是它如何计算和显示结果呢?

例如,打印输出: 4+1-3或9*2-8等,我不知道如何计算4+1-3或9*2-8的结果并打印出来。

代码语言:javascript
复制
public static void main(String[] args) {
    int t = 0;
    String[] operators = {"-", "+", "*"};
    String operator;
    Random r = new Random();

    for (int i = 0; i < 3; i++) {
        int randNum = randNums(9, 1);
        operator = operators[r.nextInt(operators.length)];
        System.out.print(randNum);
        if (t < 2) {
            System.out.print(operator);
            t++;
        }
    }

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-10 01:31:12

这是一些(相对)简单的代码,它从左到右对表达式进行will calculate (它没有考虑操作的顺序,所以3+4*5被计算为(3+4)*5,而不是正确的3+(4*5)):

代码语言:javascript
复制
public static void main(String[] args) {
    String[] operators = {"-", "+", "*"};
    String operator;
    Random r = new Random();
    int result = -1;

    for (int i = 0; i < 3; i++) {
        int randNum = r.nextInt(9) + 1; // 1 - 9 inclusive
        if (i != 0) {
            operator = operators[r.nextInt(operators.length)];
            System.out.print(operator);
            result = calculate(result, randNum, operator);
        }
        else {
            result = randNum;
        }
        System.out.print(randNum);
    }
    System.out.println("=" + result);
}
public static int calculate(int operand1, int operand2, String operator) {
    switch (operator) {
        case "+":
            return operand1 + operand2;
        case "-":
            return operand1 - operand2;
        case "*":
            return operand1 * operand2;
        default:
            throw new RuntimeException();
    }
}
票数 1
EN

Stack Overflow用户

发布于 2013-10-10 01:15:36

这不是一个简单的问题,因为你必须牢记算术运算符的优先级,所以我猜你必须使用一个对你有帮助的数学库。例如,Formula4j:http://www.formula4j.com/index.html

票数 4
EN

Stack Overflow用户

发布于 2013-10-10 01:29:48

您是否坚持将操作应用于参数?

最简单的方法:

代码语言:javascript
复制
if ("+".equals(operator)) {
  result = arg1 + arg2;
} else if ...
System.out.println("See, " + arg1 + operator + arg2 " = " + result);

一种更具可扩展性的方式,它使用哈希表而不是无限的if

代码语言:javascript
复制
import java.util.*;

// Poor man's first-class function
interface BinaryOp {
  int apply(int arg1, int arg2);
}

final static BinaryOp ADD = new BinaryOp() {
  public int apply(int arg1, int arg2) { return arg1 + arg2; }
}

final static BinaryOp SUBTRACT = new BinaryOp() {
  public int apply(int arg1, int arg2) { return arg1 - arg2; }
}

final static BinaryOp MULTIPLY = new BinaryOp() {
  public int apply(int arg1, int arg2) { return arg1 * arg2; }
}

static final Map<String, BinaryOp> OPERATIONS = new HashMap<String, BinaryOp>();

// This replaces the 'if', easier to extend.
static {
  OPERATIONS.put("+", ADD);
  OPERATIONS.put("-", SUBTRACT);
  OPERATIONS.put("*", MULTIPLY);
}

public static void main(String[] args) {
  ...
  BinaryOp operation = OPERATIONS.get(operation_name);
  int result = operation.apply(arg1, arg2);
  ...
}

如果你认为这是不必要的冗长,它是。类似这样的东西仍然是Java-land中的典型模式。(这就是Scala存在的原因,但这是另一回事。)

这甚至没有触及操作优先级或括号。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19278497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档