2016-12-29 17 views
-3

Ich habe zwei verschiedene Klassen. Ja, sie sind im selben Projekt, verpacken alles. Dieses Projekt stammt aus dem Buch: Java Programmierung für Kinder, Eltern und Großeltern von Yakov Fain. Seiten: 95-100. Sie können ein PDF des Buches leicht erhalten. Die Namen der zwei verschiedenen Klassen sind unten. Ich werde die zwei Klassen zeigen, die ich habe.Rechner in Java, funktioniert NICHT

Klasse, die den Rechner ist Itself: Rechner

Klasse, die den Rechner läuft: 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(); 
} 
} 

* Das war der Rechner-Klasse.

** Jetzt unten ist der Code, der die Calculator-Klasse ausführt.

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

Diese beiden Klassen zeigen einen Rechner an die Konsole, die etwa wie folgt aussieht: (https://i.stack.imgur.com/Y4XHE.png)

Jedes Mal, wenn ich das Programm laufen und ich habe eine Gleichung wie zum Beispiel: 1 + 1, und dann habe ich Drücken Sie '=', das Programm läuft nicht und liefert nicht das Ergebnis der Gleichung, die in diesem Fall 2 ist. Ich habe auch den Code im Buch gelesen und es ist identisch oder das ist, was ich davon halte.

+0

möchten Sie vielleicht aus dem Titel Eclipse nehmen – SaggingRufus

+0

Okay, wird es tun. Vielen Dank! –

+0

Scoping-Problem. Sie führen nur Berechnungen in dem Block durch, der '/' verarbeitet. – EJP

Antwort

0

Sie haben vergessen, das Ereignis zu behandeln, wenn der Benutzer auf die Schaltfläche equals (=) in der Methode actionPerformed (innerhalb CalculatorEngine.java) klickt. Ändern Sie es zu diesem und es funktioniert:

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

Ich habe den Code ersetzt, den ich ursprünglich mit dem Code hatte, der oben bekannt gegeben wurde. Es funktioniert und ich bin dankbar dafür. Du warst eine große Hilfe, danke für das @smoggers. –