2013-10-09 4 views
2

임의의 숫자와 연산자를 만들기 위해이 코드를 만들었지 만 어떻게 계산하고 결과를 표시 할 수 있습니까?Java에서 결과를 계산하는 방법은 무엇입니까?

예를 들어 4 + 1-3 또는 9 * 2-8 등이 인쇄됩니다. 4 + 1-3 또는 9 * 2-8의 결과를 계산하는 방법을 모르겠습니다. 그것을 인쇄하십시오. 내 생각 엔 당신이 당신을 도와 수학 라이브러리를 사용해야합니다 그래서 당신이 염두에 산술 연산자의 우선 순위를 유지해야하기 때문에 간단한 문제 아니다

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++; 
     } 
    } 

} 
+0

3 + 4 * 5를 올바른 방식으로 평가해야합니까? –

+0

@Tim S, 아직 안돼, 그게 내 다음 단계가 될거야,하지만 먼저이 문제를 해결하고 내가 계속할 수 있는지 알아보기 위해 – MOTIVECODEX

+0

@davecom, 중복이 아니며 ciemborg가 그 게시물에 대해 말하고있다. " 그것을 위해 JS 엔진을 실행하는 것은 "꽤"정상 "입니다. 이미 모든 부분을 무작위로 추출했습니다. 나는 그것을 계산할 필요가 있으므로 중복이 아닙니다. – MOTIVECODEX

답변

1

는 (그래서 3+4*5(3+4)*5 아닌 올바른 3+(4*5)로 평가되고, 그 계정으로 작업의 순서를 고려하지 않습니다) 왼쪽에서 오른쪽 표현을 will calculate 일부 (상대적으로) 간단한 코드입니다
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(); 
    } 
} 
+0

감사드립니다. – MOTIVECODEX

3

. 예를 들어, Formula4j : http://www.formula4j.com/index.html

+0

이미 올바른 우선 순위에 사용할 수있는 부분이 있습니다. 지금은 그대로 계산해야합니다. – MOTIVECODEX

+0

이 라이브러리의 "예제"섹션이 있으면 사용하기 쉽고 계산할 수 있습니다 귀하의 수식이 포함 된 문자열의 결과를 직접 입력하십시오. –

1

작업을 인수에 적용하지 않습니까? 끝없는 if 대신 해시 테이블을 사용

if ("+".equals(operator)) { 
    result = arg1 + arg2; 
} else if ... 
System.out.println("See, " + arg1 + operator + arg2 " = " + result); 

약간 더 확장 방법 :

가장 간단한 방법

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); 
    ... 
} 

이 불필요하게 긴 생각한다면, 그것은이다. 여전히 자바와 같은 전형적인 패턴이 있습니다. 이것이 바로 스칼라가 존재하지만 또 다른 이야기입니다.

이것은 작업 우선 순위 나 괄호에 영향을 미치지 않습니다.

:
관련 문제