2016-03-25 2 views
2

Итак, вопрос в том, как я могу сделать это, чтобы приложение моего калькулятора могло принимать входные данные следующим образом: 100 * 2/2 + 5 и заставить его вернуть сумму? или, может быть, даже как-то использовать() скобки.?калькулятор Java добавление номеров

import java.util.Scanner; 

public class Calculator { 
    public static void main(String[] args) { 
     Scanner scanner = new Scanner(System.in); 

     System.out.println("Enter number: "); 
     String input = scanner.nextLine(); 

     System.out.println("Enter number 2: "); 
     String input2 = scanner.nextLine(); 

     System.out.println("Enter operator "); 
     String op = scanner.nextLine(); 

     int intEnter1 = Integer.parseInt(input.toString()); 
     int intEnter2 = Integer.parseInt(input2.toString()); 

     if (op.contains("+")) { 
      System.out.println(intEnter1 + intEnter2); 
     } 

     if (op.contains("-")) { 
      System.out.println(intEnter1 - intEnter2); 
     } 

     if (op.contains("*")) { 
      System.out.println(intEnter1 * intEnter2); 
     } 

     if (op.contains("/")) { 
      double intEnter1Double = (double) intEnter1; 
      double intEnter2Double = (double) intEnter2; 
      System.out.println(intEnter1Double/intEnter2Double); 
     } 
    } 
} 
+0

То, что вы хотите достичь будет включать в себя намного больше кода, и так как SO не является услугой кода письма, вам необходимо либо попросить более конкретный вопрос или просто попробуйте все. –

+0

Вам нужно повернуть выражение из ноты infix, чтобы отменить польский нотацию, а затем оценить его. Это хорошо известная проблема, и есть много учебников и примеров, поэтому вы должны начать там и задать конкретный вопрос здесь, когда вы нажмете на блокпост. – Filkolev

ответ

2

Вы должны преобразовать выражение Reverse Polish notation. Идея заключается в том, чтобы превратить сложное выражение в такую ​​форму, что можно будет вычислить результат, используя следующий алгоритм:

  1. выражения разобранного слева направо
  2. чисел выталкиваются в стек
  3. если оператор произошел, количество корреспондентского чисел а выскочило из стека (1 для одноместный операции, 2 для двоичного) и операции выполняется на них

Например, если входной сигнал:

5 + ((1 + 2) × 4) − 3 

обозначение будет следующим:

5 1 2 + 4 × + 3 − 
2

Я нашел библиотеку, которая оценивает выражения. Вы можете попробовать это.

http://javaluator.sourceforge.net/en/home/

Double value = new DoubleEvaluator().evaluate(expression); 

Но эта библиотека делает всю работу за вас, и, может быть, вы хотите сделать сам алгоритм нет?

+0

Спасибо, что я буду использовать – user6069863

4

Существует также очень хорошая библиотека для оценки математических выражений, которая называется exp4j.

Вы можете сделать что-то вроде этого:

Expression e = new ExpressionBuilder("3 * sin(y) - 2/(x - 2)") 
    .variables("x", "y") 
    .build() 
    .setVariable("x", 2.3) 
    .setVariable("y", 3.14); 
double result = e.evaluate();