# Taschenrechner "Clear und Minusbutton"



## Utos (25. Jun 2010)

Ich habe zwei Probleme mit meinem Taschenrechner

1) Mein Clear Button funktioniert nicht, ich weiß nicht genau, wie ich den bauen soll
2) Mein Minus funktioniert nicht, das fügt immer nur das Minus ein, als wenn es ein Vorzeichen wäre
    (Vielleicht start=true oder start=false irgendwo falsch gesetzt?)

Ich bin leider mit den Notizen noch nicht ganz fertig, wenn ihr eine Frage habt, dann fragt ruhig 


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
/**
 * @Title Informatik Projekt 2010
 * @author  Henning und Gabriel
 * 
 */
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
{
   /**
	 * 
	 */
	private static final long serialVersionUID = 1L;

public CalculatorFrame()
   {
      super("Taschenrechner");									// Taschenrechner benennen
      CalculatorPanel panel = new CalculatorPanel();
      add(panel);
      pack();
   }
}
class CalculatorPanel extends JPanel
{
   
	private static final long serialVersionUID = 1L;
	
public CalculatorPanel()
   {
      setLayout(new BorderLayout());
 
      result = 0;
      lastCommand = "=";
      start = true;
 

	  display = new JLabel("0", SwingConstants.CENTER);			// Ausgabezeile zeigen und Text in die Mitte verschieben
      display.setEnabled(false);
      add(display, BorderLayout.NORTH);							// Ausgabezeile im oberen Bereich anzeigen
 
      ActionListener insert = new InsertAction();				// Später gebraucht um Zahlen einzusetzen
      ActionListener command = new CommandAction();				// Später gebraucht um Commands entgegenzunehmen
 
      panel = new JPanel();										//                                                                                  Tachenrechnerknöpfe werden erstellt
      panel.setLayout(new GridLayout(5, 4));					// Tachenrechnerknöpfe werden erstellt
      
      addButton("C", command);
  
      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);
      }
   }
 
   /**
    * Diese Aktion führt den mit der Taste verbundenen
    * Befehl aus. 
    */
   private class CommandAction implements ActionListener
   {
      public void actionPerformed(ActionEvent event)
      {
System.out.println("actionPerformed\t"+event.getActionCommand());
         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.
    * @param x der mit dem vorherigen Ergebnis zu berechnende Wert
    */
   public void calculate(double x)
   
	   
   {
      if (lastCommand.equals("+")) result += x;								// Berechnungen ausführen
      else 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("C")) {result=0; start=false;}
      System.out.println("calculate\t"+lastCommand+"\t"+result);
      display.setText("" + result);
      
   }


   private JLabel display;							//Variablen zuweisen
   private JPanel panel;
   private double result;
   private String lastCommand;
   private boolean start;
   
}
```

Besonders suche ich Hilfe beim Clear Button, das wär super :toll:


----------



## Empire Phoenix (25. Jun 2010)

lastCommand = "";
result = 0;
display.setText("");

oder so?


----------



## Utos (25. Jun 2010)

Klappt nicht, der "C" Button zeigt keine Reaktion mehr.


----------



## Final_Striker (26. Jun 2010)

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

Manchmal ist start bei dir true. Aus diesem Grund wird calculate nicht ausgeführt und der C-Button zeig keine Wirkung.


----------



## Utos (26. Jun 2010)

Und ich weiß nicht, wo ich das ändern soll :/


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
/**
 * @Title Informatik Projekt 2010
 * @author  Henning und Gabriel
 * 
 */
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
{
   /**
     * 
     */
    private static final long serialVersionUID = 1L;
 
public CalculatorFrame()
   {
      super("Taschenrechner");                                  // Taschenrechner benennen
      CalculatorPanel panel = new CalculatorPanel();
      add(panel);
      pack();
   }
}
class CalculatorPanel extends JPanel
{
   
    private static final long serialVersionUID = 1L;
    
public CalculatorPanel()
   {
      setLayout(new BorderLayout());
 
      result = 0;
      lastCommand = "=";
      start = true;
 
 
      display = new JLabel("0", SwingConstants.CENTER);         // Ausgabezeile zeigen und Text in die Mitte verschieben
      display.setEnabled(false);
      add(display, BorderLayout.NORTH);                         // Ausgabezeile im oberen Bereich anzeigen
 
      ActionListener insert = new InsertAction();               // Später gebraucht um Zahlen einzusetzen
      ActionListener command = new CommandAction();             // Später gebraucht um Commands entgegenzunehmen
 
      panel = new JPanel();                                     //                                                                                  Tachenrechnerknöpfe werden erstellt
      panel.setLayout(new GridLayout(5, 4));                    // Tachenrechnerknöpfe werden erstellt
      
      addButton("C", command);
  
      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();					// Nach Klicken von Rechenoption das Feld leeren
         if (start)
         {
            display.setText("");
            start = false;
         }
         display.setText(display.getText() + input);
      }
   }
 
   /**
    * Diese Aktion führt den mit der Taste verbundenen
    * Befehl aus. 
    */
   private class CommandAction implements ActionListener
   {
      public void actionPerformed(ActionEvent event)
      {
System.out.println("actionPerformed\t"+event.getActionCommand());
         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 = true;
            }
            else
               lastCommand = command;
         }
         else
         {
            // Berechnung ausführen
            calculate(Double.parseDouble(display.getText()));
            lastCommand = command;
            start = true;
         }
      }
   }
 
   /**
    * Führt die anstehenden Berechnungen aus.
    * @param x der mit dem vorherigen Ergebnis zu berechnende Wert
    */
   public void calculate(double x)
   
       
   {
      if (lastCommand.equals("+")) result += x;                             // Berechnungen ausführen
      else 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("C")){ start=false;}
      display.setText("" + result);
      
   }
   public void anfang (double x)
   
   {
   if (start= false){ result=0; 
   System.out.println("0");
   display.setText("");
   start=true;
   }
   }
   
   public JLabel display;                          //Variablen zuweisen
   public JPanel panel;
   public double result;
   public String lastCommand;
   public boolean start;
   
}
```

Ich habs versucht jetzt extra eine neue Methode aufzurufen, aber das klappt auch nicht.
Weiß einer, wo ich start=true oder start= false ändern soll?


----------



## Final_Striker (26. Jun 2010)

Was hat diese Variable start überhaupt für einen Sinn/Zweck?


----------



## Utos (27. Jun 2010)

Du hast Recht, eigentlich war das ganze nur als Startflagge gedacht, damit am Anfang kein Text angezeigt wird. Das ist dann etwas aus dem Ruder gelaufen :autsch:

Gibts da bessere Alternativen?


----------

