2016-12-29 17 views
-3

У меня есть два разных класса. Да, они в одном проекте, все упаковывают. Этот проект из книги: Java-программирование для детей, родителей и бабушек и дедушек Якова Фаина. Страницы: 95-100. Вы можете легко получить PDF-книгу. Названия двух разных классов ниже. Чтобы я показал два класса, у меня есть.Калькулятор на Java, не работает

Класс, который калькулятор сам собой: Калькулятор

Класс, который работает калькулятор: CalculatorEngine

import javax.swing.*; 
import java.awt.BorderLayout; 
import java.awt.GridLayout; 

public class Calculator { 

JButton button0 = new JButton("0"); 
JButton button1 = new JButton("1"); 
JButton button2 = new JButton("2"); 
JButton button3 = new JButton("3"); 
JButton button4 = new JButton("4"); 
JButton button5 = new JButton("5"); 
JButton button6 = new JButton("6"); 
JButton button7 = new JButton("7"); 
JButton button8 = new JButton("8"); 
JButton button9 = new JButton("9"); 
JButton buttonPoint = new JButton("."); 
JButton buttonEqual = new JButton("="); 
JButton buttonPlus = new JButton("+"); 
JButton buttonSub = new JButton("-"); 
JButton buttonMult = new JButton("*"); 
JButton buttonDiv = new JButton("/"); 
JPanel windowContent = new JPanel(); 
JTextField displayField = new JTextField(30); 

Calculator() { 

    BorderLayout bl = new BorderLayout(); 
    windowContent.setLayout(bl); 

    windowContent.add("North", displayField); 

    JPanel p1 = new JPanel(); 
    GridLayout gl = new GridLayout(4, 3); 
    p1.setLayout(gl); 

    p1.add(button0); 
    p1.add(button1); 
    p1.add(button2); 
    p1.add(button3); 
    p1.add(button4); 
    p1.add(button5); 
    p1.add(button6); 
    p1.add(button7); 
    p1.add(button8); 
    p1.add(button9); 
    p1.add(buttonPoint); 
    p1.add(buttonEqual); 

    windowContent.add("Center", p1); 

    JPanel p2 = new JPanel(); 
    GridLayout gl2 = new GridLayout(4, 1); 
    p2.setLayout(gl2); 
    p2.add(buttonDiv); 
    p2.add(buttonMult); 
    p2.add(buttonSub); 
    p2.add(buttonPlus); 

    windowContent.add("East", p2); 

    JFrame frame = new JFrame("Calculator"); 
    frame.setContentPane(windowContent); 

    frame.pack(); 
    frame.setVisible(true); 

    CalculatorEngine calcEngine = new CalculatorEngine(this); 

    button0.addActionListener(calcEngine); 
    button1.addActionListener(calcEngine); 
    button2.addActionListener(calcEngine); 
    button3.addActionListener(calcEngine); 
    button4.addActionListener(calcEngine); 
    button5.addActionListener(calcEngine); 
    button6.addActionListener(calcEngine); 
    button7.addActionListener(calcEngine); 
    button8.addActionListener(calcEngine); 
    button9.addActionListener(calcEngine); 
    buttonDiv.addActionListener(calcEngine); 
    buttonMult.addActionListener(calcEngine); 
    buttonSub.addActionListener(calcEngine); 
    buttonPlus.addActionListener(calcEngine); 
    buttonPoint.addActionListener(calcEngine); 
    buttonEqual.addActionListener(calcEngine); 
} 

public static void main(String[] args) { 
    Calculator calc = new Calculator(); 
} 
} 

* Это был класс Calculator.

** Ниже приведен код, выполняющий класс калькулятора.

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 

public class CalculatorEngine implements ActionListener { 

Calculator parent; 
char selectedAction = ' '; 

double currentResult = 0; 

CalculatorEngine(Calculator parent) { 
    this.parent = parent; 
} 

public void actionPerformed(ActionEvent e) { 

    JButton clickedButton = (JButton) e.getSource(); 
    String dispFieldText = parent.displayField.getText(); 

    double displayValue = 0; 

    if (!"".equals(dispFieldText)) { 
     displayValue = Double.parseDouble(dispFieldText); 
    } 
    Object src = e.getSource(); 

    if (src == parent.buttonPlus) { 
     selectedAction = '+'; 
     currentResult = displayValue; 
     parent.displayField.setText(""); 
    } else if (src == parent.buttonSub) { 
     selectedAction = '-'; 
     currentResult = displayValue; 
     parent.displayField.setText(""); 
    } else if (src == parent.buttonMult) { 
     selectedAction = '*'; 
     currentResult = displayValue; 
     parent.displayField.setText(""); 
    } else if (src == parent.buttonDiv) { 
     selectedAction = '/'; 
     currentResult = displayValue; 
     parent.displayField.setText(""); 

     if (selectedAction == '+') { 
      currentResult += displayValue; 
      parent.displayField.setText("" + currentResult); 
     } else if (selectedAction == '-') { 
      currentResult -= displayValue; 
      parent.displayField.setText("" + currentResult); 
     } else if (selectedAction == '*') { 
      currentResult *= displayValue; 
      parent.displayField.setText("" + currentResult); 
     } else if (selectedAction == '/') { 
      currentResult /= displayValue; 
      parent.displayField.setText("" + currentResult); 
     } 
    } else { 
     String clickedButtonLabel = clickedButton.getText(); 
     parent.displayField.setText(dispFieldText + clickedButtonLabel); 
    } 
} 
} 

этих двух классов отображения калькулятора на консоль, которая выглядит примерно так: (https://i.stack.imgur.com/Y4XHE.png)

Всякий раз, когда я запускаю программу, и я поставил уравнение, такие как: 1 + 1, а затем я нажмите '=', программа не запускается и не дает результата уравнения, которое в этом случае равно 2. Я также просмотрел код в книге, и он идентичен или это то, что я думаю об этом.

+0

вы можете принять затмение из названия – SaggingRufus

+0

Хорошо, будет делать. Спасибо! –

+0

Задача определения области. Вы выполняете только вычисления в блоке, который обрабатывает '/'. – EJP

ответ

0

Вы забываете обработать событие, нажав на кнопку равенства (=) в методе actionPerformed (в пределах CalculatorEngine.java). Измените его на это, и она работает:

public void actionPerformed(ActionEvent e) { 

     JButton clickedButton = (JButton) e.getSource(); 
     String dispFieldText = parent.displayField.getText(); 

     double displayValue = 0; 

     if (!"".equals(dispFieldText)) { 
      displayValue = Double.parseDouble(dispFieldText); 
     } 
     Object src = e.getSource(); 

     if (src == parent.buttonPlus) { 
      selectedAction = '+'; 
      currentResult = displayValue; 
      parent.displayField.setText(""); 
     } else if (src == parent.buttonSub) { 
      selectedAction = '-'; 
      currentResult = displayValue; 
      parent.displayField.setText(""); 
     } else if (src == parent.buttonMult) { 
      selectedAction = '*'; 
      currentResult = displayValue; 
      parent.displayField.setText(""); 
     } else if (src == parent.buttonDiv) { 
      selectedAction = '/'; 
      currentResult = displayValue; 
      parent.displayField.setText(""); 
     } else if (src == parent.buttonEqual) { 
      if (selectedAction == '+') { 
       currentResult += displayValue; 
       parent.displayField.setText("" + currentResult); 
      } else if (selectedAction == '-') { 
       currentResult -= displayValue; 
       parent.displayField.setText("" + currentResult); 
      } else if (selectedAction == '*') { 
       currentResult *= displayValue; 
       parent.displayField.setText("" + currentResult); 
      } else if (selectedAction == '/') { 
       currentResult /= displayValue; 
       parent.displayField.setText("" + currentResult); 
      } 
     } else { 
      String clickedButtonLabel = clickedButton.getText(); 
      parent.displayField.setText(dispFieldText + clickedButtonLabel); 
     } 
} 
+0

Я заменил код, который у меня был первоначально с кодом, который был выше. Это работает, и я благодарен за это. Вы очень помогли, спасибо за @smoggers. –