2015-03-13 2 views
-1

Здесь im просто пытается добавить первые числа ко второму числу, когда нажата кнопка (=). этот код показывает только второе число на экране при нажатии кнопки (=). как только это работает, я хочу, чтобы он работал с различными арифметическими кнопками оператора, например (+ - * /). помогите, если вы можете выяснить мой код.Попытка построить калькулятор в java GUI

частный класс TheHandler реализует ActionListener {

public void actionPerformed(ActionEvent e) { 

     //add values to buttons 
     String num = ""; 
     if(e.getSource()==btn[0]){ 
      num = "7"; 
     }else if(e.getSource()==btn[1]){ 
      num = "8"; 
     }else if(e.getSource()==btn[2]){ 
      num = "9"; 
     }else if(e.getSource()==btn[5]){ 
      num = "4"; 
     }else if(e.getSource()==btn[6]){ 
      num = "5"; 
     }else if(e.getSource()==btn[7]){ 
      num = "6"; 
     }else if(e.getSource()==btn[10]){ 
      num = "1"; 
     }else if(e.getSource()==btn[11]){ 
      num = "2"; 
     }else if(e.getSource()==btn[12]){ 
      num = "3"; 
     }else if(e.getSource()==btn[15]){    
      num = "0"; 
     } 

     //set the values to the text field   
     if (tDisplay.getText().equals("0")) 
      tDisplay.setText(num); 
     else 
      tDisplay.setText(tDisplay.getText()+num); 

     //temporary values to be stored when arithmetic operators are pressed 
     double tempValue =0; 
     double tempValue2 =0; 
     double equalsTo=0; 

     //if = button is pressed 
     if(e.getSource()==btn[19]){ 
      tempValue2 = Double.parseDouble(tDisplay.getText()); 
      equalsTo = tempValue+tempValue2; 
      tDisplay.setText(String.valueOf(equalsTo)); 
     } 

     //if + button is pressed 
     if(e.getSource()==btn[3]){ 
      tempValue = Double.parseDouble(tDisplay.getText()); 
      tDisplay.setText(""); 
     } 

    } 

} 

ответ

0

Похоже, вы заявили локальные переменные для хранения промежуточных результатов, поэтому эти переменные повторно инициализируются до 0 каждый раз, когда выполняется ваше действие. Вместо этого вы можете захотеть, чтобы они были свойствами класса, поэтому значения в переменных могут «пережить» несколько вызовов метода actionPerformed.

+0

Ты абсолютно прав, что сделал эту работу. Теперь, как я могу заставить калькулятор работать на разных кнопках, например (+ - * /), когда нажата кнопка (=)? – user1462498

+0

Вам понадобится еще одна переменная для хранения текущей операции (например, кода операции), которую вы вводите, а затем на основе этой операции вы выполните правильные действия. – Dae

1
if(e.getSource()==btn[19]){ 
    tempValue2 = Double.parseDouble(tDisplay.getText()); 
    equalsTo = tempValue+tempValue2; 
    tDisplay.setText(String.valueOf(equalsTo)); 
} 

делает то, что вы сказали это сделать.

tempValue2 остается 0, потому что

double tempValue =0; 

поэтому сумма всегда будет tempValue2 потому tempValue2 + 0 == tempValue2

Вы parseDouble для tempValue2, но вы не сделаете это для tempValue

+0

да я знаю, что это делает, если я не инициализирую tempValue до 0, тогда я получаю ошибку double tempValue; – user1462498

+0

Да, но сейчас логика кода не суммирует ничего, что только отображает один из ваших входов. Суммирования не происходит, потому что другое значение всегда равно 0. Вам нужно обрабатывать оба входа и суммировать их. –

Смежные вопросы