Taschenrechner Coding Erklärung

HansK

Mitglied
Hallo,
in der Schule haben wir einen Taschenrechner programmiert, jedoch versteh ich nicht ganz was "start" für eine Funktion hat, und was alles mit dieser bezweckt wird.
Hier einmal das Coding.
Gruß,
Hans

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Calculator
{
   public static void main(String[] args)
   {
      CalculatorFrame frame = new CalculatorFrame();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }
}

class CalculatorFrame extends JFrame
{
   public CalculatorFrame()
   {
      setTitle("Calculator");
      CalculatorPanel panel = new CalculatorPanel();
      add(panel);
      pack();
   }
}

class CalculatorPanel extends JPanel
{
   public CalculatorPanel()
   {
      setLayout(new BorderLayout());

      result = 0;
      lastCommand = "=";
      start = true;

      display = new JButton("0");
      display.setEnabled(false);
      add(display, BorderLayout.NORTH);

      ActionListener insert = new InsertAction();
      ActionListener command = new CommandAction();

      panel = new JPanel();
      panel.setLayout(new GridLayout(4, 4));

      addButton("7", insert);
      addButton("8", insert);
      addButton("9", insert);
      addButton("/", command);

      addButton("4", insert);
      addButton("5", insert);
      addButton("6", insert);
      addButton("*", command);

      addButton("1", insert);
      addButton("2", insert);
      addButton("3", insert);
      addButton("-", command);

      addButton("0", insert);
      addButton(".", insert);
      addButton("=", command);
      addButton("+", command);

      add(panel, BorderLayout.CENTER);
   }

   private void addButton(String label, ActionListener listener)
   {
      JButton button = new JButton(label);
      button.addActionListener(listener);
      panel.add(button);
   }

   private class InsertAction implements ActionListener
   {
      public void actionPerformed(ActionEvent event)
      {
         String input = event.getActionCommand();
         if (start)
         {
            display.setText("");
            start = false;
         }
         display.setText(display.getText() + input);
      }
   }

   private class CommandAction implements ActionListener
   {
      public void actionPerformed(ActionEvent event)
      {
         String command = event.getActionCommand();

         // Füge den Präfix "-" an den String an wenn
         // es sich um den ersten Befehl handelt (negative Zahl)
         if (start)
         {
            if (command.equals("-"))
            {
               display.setText(command);
               start = false;
            }
            else
               lastCommand = command;
         }
         else
         {
            // Berechnung ausführen
            calculate(Double.parseDouble(display.getText()));
            lastCommand = command;
            start = true;
         }
      }
   }

   /**
    * Führt die anstehenden Berechnungen aus.
    * parameter x der mit dem vorherigen Ergebnis zu berechnende Wert
    */
   public void calculate(double x)
   {
      if (lastCommand.equals("+")) result += x;
      else if (lastCommand.equals("-")) result -= x;
      else if (lastCommand.equals("*")) result *= x;
      else if (lastCommand.equals("/")) result /= x;
      else if (lastCommand.equals("=")) result = x;
      display.setText("" + result);
   }

   private JButton display;
   private JPanel panel;
   private double result;
   private String lastCommand;
   private boolean start;
}
 

Fu3L

Top Contributor
Wenn start true ist, wird die erste Zahl eingegeben und einfach nur "aufbewahrt", wenn start false ist, dann ist die zweite zahl eingegeben worden, sodass nun (ohne Berücksichtigung von Punkt vor Strich Rechnung) das Ergebnis berechnet wird...
Es ist übrigends üblich die Membervariablen an den Beginn einer Klassendeklaration zu schreiben und nicht ans Ende.. Das ist technisch möglich, aber da erwartet die - würde ich behaupten - kaum jemand...

Edit: Euch ist aber noch ein Fehler unterlaufen: Drückt man zum Berechnen auf das Gleichzeichen und zieht danach eine Zahl ab, erscheint lediglich diese Zahl als Ergebnis, als hätte man sie von 0 abgezogen ;)
 

njans

Top Contributor
...Es ist übrigends üblich die Membervariablen an den Beginn einer Klassendeklaration zu schreiben und nicht ans Ende.. Das ist technisch möglich, aber da erwartet die - würde ich behaupten - kaum jemand...

Genau das ist mir gerade auch durch den Kopf gegangen, als ich mich wunderte, dass da Variablen undeklariert benutzt werden ^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Exelsior JavaFX Taschenrechner mit FX AWT, Swing, JavaFX & SWT 6
melaniemueller Taschenrechner JavaFX AWT, Swing, JavaFX & SWT 4
N JavaFX Einfacher Taschenrechner mit Scene Builder und Java FX AWT, Swing, JavaFX & SWT 0
thor_norsk Taschenrechner AWT, Swing, JavaFX & SWT 8
melaniemueller JavaFX Taschenrechner mit SceneBuilder AWT, Swing, JavaFX & SWT 12
K JavaFX Taschenrechner textField auf 10stellen begrenzen AWT, Swing, JavaFX & SWT 26
L JavaFX javafx.fxml.LoadException bei einem Taschenrechner AWT, Swing, JavaFX & SWT 5
N Swing Taschenrechner GUI AWT, Swing, JavaFX & SWT 13
B Probleme Action Listener Taschenrechner AWT, Swing, JavaFX & SWT 27
O JavaFX mini Taschenrechner! AWT, Swing, JavaFX & SWT 35
N Taschenrechner mit mehreren Rechnungen AWT, Swing, JavaFX & SWT 18
A JavaFX Sehr viele Exceptions bei Taschenrechner mit JavaFx AWT, Swing, JavaFX & SWT 2
K Taschenrechner mit GUI AWT, Swing, JavaFX & SWT 2
L Event Handling Gui für Taschenrechner AWT, Swing, JavaFX & SWT 27
H Swing Taschenrechner GUI AWT, Swing, JavaFX & SWT 5
M Taschenrechner AWT, Swing, JavaFX & SWT 21
T Swing Taschenrechner AWT, Swing, JavaFX & SWT 2
M AWT Java-Taschenrechner, wie Stack richtig verwenden? AWT, Swing, JavaFX & SWT 14
C Grafik Taschenrechner AWT, Swing, JavaFX & SWT 5
Jats Hilfe bei FocusListener für Taschenrechner AWT, Swing, JavaFX & SWT 4
B Taschenrechner mit ComboBox AWT, Swing, JavaFX & SWT 7
S AWT Probleme mit Taschenrechner AWT, Swing, JavaFX & SWT 9
V Bitte um Hilfe bei nem Taschenrechner AWT, Swing, JavaFX & SWT 8
C Taschenrechner in Java AWT, Swing, JavaFX & SWT 7
M MouseEvent JButton Taschenrechner AWT, Swing, JavaFX & SWT 5
K Java-Taschenrechner AWT, Swing, JavaFX & SWT 1
L Taschenrechner mit Klammern AWT, Swing, JavaFX & SWT 11
H Taschenrechner AWT, Swing, JavaFX & SWT 5
G Taschenrechner-Problem AWT, Swing, JavaFX & SWT 2
S Swing Coding richtig einfügen AWT, Swing, JavaFX & SWT 3
J 2D-Grafik Brauche Erklärung von Methode AWT, Swing, JavaFX & SWT 1
M JFrame - Anfänger, kurze Erklärung AWT, Swing, JavaFX & SWT 5
V Bitte um kurze erklärung AWT, Swing, JavaFX & SWT 2
S Erklärung getListCellRendererComponent? AWT, Swing, JavaFX & SWT 4
L Erklärung JTable AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben