Калькулятор, решающий три цифры, не работает должным образом

#java

#java

Вопрос:

Таким образом, мой калькулятор отлично работает с любыми вычислениями, включающими две цифры, включая кнопку C, однако, если я попытаюсь выполнить любые вычисления из трех цифр, это на самом деле не работает, например 1 2 3 = 5 может ли кто-нибудь сказать мне, почему это так, и в любом случае я мог бы это исправить?

 public class Calculator {  

  private long currentInput;          //current input
  private long previousInput;         // previous input
  private long resu<            // result of calculation
  private String lastOperator = "";  // keeps track of the last operator entered


  /* New digit entered as integer value i - moves currentInput 1 decimal place to the left and adds i in "one's column" */
  public void inDigit(long i) {
    currentInput = (currentInput * 10)   i;
  }


  /* Operator entered    - or *   */
  public void inOperator(String op) {
    previousInput = currentInput;      // save the new input as previous to get ready for next input
    currentInput = 0;
    lastOperator = op;                 // remember which operator was entered
  } 


   /* Equals operation sets result to previousInput   - or * currentInput (depending on lastOperator) */
  public void inEquals() {
    if (lastOperator.equals(" ")) {
      result = previousInput   currentInput;
    } else if (lastOperator.equals("-")) { 
      result = previousInput - currentInput;
    } else if (lastOperator.equals("*"))  {
      result = previousInput * currentInput;
    } 
    lastOperator = "";       // reset last operator to "nothing"
  }


  /* Clear operation */
  public void inClear() {
    currentInput = 0;
    previousInput = 0;
    result = 0;
    lastOperator = "";
  } 

  /* returns the current result */
  public String getResult() {  
    return Long.toString(result);  //converts int to String
  }

  /* returns the previous input value */
  public String getPreviousInput() {
    return Long.toString(previousInput);
  }
  /* returns the current input value */
  public String getCurrentInput() {
    return Long.toString(currentInput);
  }
  

Ответ №1:

Ну, вы сохраняете только последние два операнда, поэтому для вашего примера 1 2 3 = 5, 1 теряется при вводе второго знака , а 2 3 = 5.

Ответ №2:

Вы сохраняете только последние два введенных «ввода» (в previousInput и currentInput ), поэтому, когда вы переходите к трем или более операндам без первого нажатия = , все, кроме самых последних двух, исчезают.

Ответ №3:

ваша проблема в том, что когда вы добавляете новый оператор, вы просто сдвигаете свои значения без каких-либо вычислений, если предыдущий оператор сохранен и оба значения заданы при добавлении нового оператора, вам нужно выполнить вычисления для существующих значений и оператора перед изменением сохраненного оператора

Ответ №4:

Поскольку в вашем методе InEquals () вы используете только previousInput и currentInput, поэтому ваш 1 2 3 = 5, потому что для 2-го ‘ ‘ результат = 2 3