Plus-Operation beim Taschenrechner klappt nicht.

tom6619

Grünschnabel
Hallo,

in der actionPerformed- Methode des Plus-Buttons soll auch ne plus-Rechnung der eingegebenen Zahlen durchgeführt werden.

Zwar wird die 1. zahl in der Variable "ergebnis"gespeichert und die nachfolgende dazuaddiert, aber wenn nun die 2. Zahl eingegeben wird, erscheint diese im Display neben der 1. Zahl, statt die 1. Zahl ganz zu ersetzen. D.h. wenn z.B. zu der Zahl 4 eine 5 addiert werden soll, wird 4+45 gerechnet statt 4+5...

Ich denke mal, dass in diesem Fall der Button für die Zahl 5 bei einer Plus-Operation die vorherige Zahl im Display löschen müsste, damit sie ihr nicht angehängt wird.Wüsste jedoch nicht wie ich es realisieren könnte . Hätte hierzu jemand einen Lösungsanzats oder Tip für mich ? Vielen Dank für jegliche Hilfe...:)

Das ist mein Ansatz:

Die Variable "ergebnis" habe ich global deklariert..


[
Code:
bPlus.addActionListener(   new ActionListener (){ 
            public void actionPerformed (ActionEvent e){ 
              int zahl =(Integer.parseInt(tAnzeige.getText())) ; 
              ergebnis += zahl; 
              String ausgabe = Integer.toString(ergebnis); 
              tAnzeige.setText(ausgabe); 
            } 
         } 
)


Buttons für die Zahlen 4 und 5 :

Code:
b5.addActionListener (new ActionListener (){ 
               public void actionPerformed (ActionEvent e){ 
                  if (tAnzeige.getText().equals("0")){ 
                                 tAnzeige.setText(""); 
                     tAnzeige.setText("5"); 
                  } 
                  else 
                     tAnzeige.setText(tAnzeige.getText() + e.getActionCommand()); 
               } 
            } 
      );

Code:
  b4.addActionListener ( 
            new ActionListener (){public void actionPerformed (ActionEvent e){ 
                  if (tAnzeige.getText().equals("0")){ 
                      
                     tAnzeige.setText(""); 
                     tAnzeige.setText("4"); 
                  } 
                  else 
                     tAnzeige.setText(tAnzeige.getText() + e.getActionCommand()); 
               } 
            } 
      );
 
Hallo,

Code:
else 
                     tAnzeige.setText(tAnzeige.getText() + e.getActionCommand());

Damit sagst du, dass die Zahlen beide drin stehen sollen. Angenommen in deinem Textfeld steht die 4 und du willst die 5 dazu addieren, dann könnte man den Befehl auch so schreiben
Code:
else 
                     tAnzeige.setText(4 + 5);

Also steht dann in deinem Textfeld 45. Deine Anzeige wird bei dir nur gelöscht, wenn die Zahl die drin steht 0 ist.
Ich hoffe, das hilft dir etwas.

MFG
zEriX
 
Danke für den Hinweis zerix,

ich habe nun ne kleine Veränderung vorgenommen.
Undzwar habe ich ne String Variable "zuletzgedrückt" deklariert mit dem Anfangszustand:

String zuletztgedrückt=""; diese Bedingung lasse ich dann überprüfen bevor ich eine Zahl eingebe:

Code:
b4.addActionListener (
				new ActionListener (){
					public void actionPerformed (ActionEvent e){
						if (tAnzeige.getText().equals("0")||!(zuletztgedrückt.equals(""))){ 
							
							tAnzeige.setText("");
							tAnzeige.setText("4");
						}
						else
							tAnzeige.setText(tAnzeige.getText() + e.getActionCommand());
					}
				}
		);
		
		b5.addActionListener (
				new ActionListener (){
					public void actionPerformed (ActionEvent e){
						if (tAnzeige.getText().equals("0")||!(zuletztgedrückt.equals(""))){ 
							
							tAnzeige.setText("");
							tAnzeige.setText("5");
						}
						else
							tAnzeige.setText(tAnzeige.getText() + e.getActionCommand());
					}
				}
		);



Code:
bPlus.addActionListener(
				new ActionListener (){
					public void actionPerformed (ActionEvent e){
						zuletztgedrückt = e.getActionCommand();
						
						ergebnis =ergebnis+ zahl;
		String z = Integer.toString(ergebnis);
		tAnzeige.setText(z);
											
					}
					
				}
		);

Aber jetzt musste ich leider feststellen, dass die plus-Taste immer den aktuellen Display-Wert ins ergebnis aufnimmt, sprich jedes mal diesen aufsummiert.
Meine Absicht war es lediglich auf einen plus-Modus zu wechseln, um dann die eingegebenen Zahlen jeweils zum Vorhandenen dazuzählen, ähnlich wie der Windows-Taschenrecher..
Bräuchte wieder eine kleine Hilfe... :confused:
 
Zuletzt bearbeitet:
Zahl liest immer den aktuellen Display-Wert ein, ist zunächst auch so gewollt, nur soll dieser nicht beim Betätigen der Plus-Taste eingelesen werden :

hier nochmal der Code für den Plus-Button:
Code:
bPlus.addActionListener(
				new ActionListener (){
					public void actionPerformed (ActionEvent e){
						zuletztgedrückt = e.getActionCommand();
						
						
						addiere (); 
											
					}
					
				}
		);

so sieht die Methode addiere aus:


Code:
public void addiere (){
		
		if (zuletztgedrückt.equals("+")){
			
			int zahl =(Integer.parseInt(tAnzeige.getText())) ;
		
			ergebnis =ergebnis+ zahl;
			String z = Integer.toString(ergebnis);
			tAnzeige.setText(z);
		}
		
	}

jeder zuletzt betätigte Button wird beim String "zuletztgedrückt" registriert:

Für den Button für die Zahl 9 beispielsweise siehts so aus:

Code:
b9.addActionListener (
				new ActionListener (){
					public void actionPerformed (ActionEvent e){
						if (tAnzeige.getText().equals("0")||!(zuletztgedrückt.equals(""))){ 
							
							tAnzeige.setText("");
							tAnzeige.setText("9");
							zuletztgedrückt=e.getActionCommand();
						}
						else{
							tAnzeige.setText(tAnzeige.getText() + e.getActionCommand());
							zuletztgedrückt=e.getActionCommand();
						}
					}
				}
		);

Dennoch besteht das Problem mit dem Plus-Button...
ich füge mal den Gesamtcode hinein:

.
Code:
package Uebung1;

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

import com.sun.org.apache.xml.internal.utils.StringToIntTable;

public class Taschenrechner extends JFrame{
	
	JTextField tAnzeige = new JTextField ("0",30);
	JButton b1 = new JButton ("1");
	JButton b2 = new JButton ("2");
	JButton b3 = new JButton ("3");
	JButton b4 = new JButton ("4");
	JButton b5 = new JButton ("5");
	JButton b6 = new JButton ("6");
	JButton b7 = new JButton ("7");
	JButton b8 = new JButton ("8");
	JButton b9 = new JButton ("9");
	JButton b0 = new JButton ("0");
	JButton bKomma = new JButton (",");
	JButton bIstgleich = new JButton ("=");
	JButton bPlus = new JButton ("+");
	JButton bMinus = new JButton ("-");
	JButton bMal = new JButton ("*");
	JButton bGeteilt = new JButton ("/");
	JButton bRücktaste = new JButton ("<<");
	JButton bLöschen = new JButton ("C");
	JButton bAusschalten = new JButton ("OFF");
	
	JPanel panel = new JPanel ();
	JPanel panel2 = new JPanel ();
	JPanel panel3 = new JPanel ();
	JPanel panel4 = new JPanel ();
	
	public int ergebnis;
	String zuletztgedrückt="";
	
	
	
	
	public Taschenrechner() {
		
		super ("Taschenrechner");
		setLocation (400,300);
		setResizable (false);
		this.getContentPane().setLayout (new BorderLayout (0,10));
		tAnzeige.setHorizontalAlignment(tAnzeige.RIGHT);
		tAnzeige.setFocusable(false); // cursor ausblenden
		panel2.setLayout(new BorderLayout (0,10));
		
		panel2.add(BorderLayout.NORTH,tAnzeige);
		
		panel3.setLayout(new BorderLayout(0,5));
		panel4.setLayout(new GridLayout (1,2,5,0));
		panel4.add(bRücktaste);
		panel4.add(bLöschen);
		panel3.add(BorderLayout.WEST,panel4);
		panel3.add(BorderLayout.EAST,bAusschalten);
		
		
		panel2.add(BorderLayout.CENTER,panel3);
		
		this.getContentPane().add(BorderLayout.NORTH,panel2);
		
		
	
		panel.setLayout(new GridLayout (4,4,15,15));
		panel.add(b7);
		panel.add(b8);
		panel.add(b9);
		panel.add(bGeteilt);
		panel.add(b4);
		panel.add(b5);
		panel.add(b6);
		panel.add(bMal);
		panel.add(b1);
		panel.add(b2);
		panel.add(b3);
		panel.add(bMinus);
		panel.add(bKomma);
		panel.add(b0);
		panel.add(bIstgleich);
		panel.add(bPlus);		
		this.getContentPane().add(BorderLayout.CENTER,panel);

		b1.addActionListener (
				new ActionListener (){
					public void actionPerformed (ActionEvent e){
						
						if (tAnzeige.getText().equals("0")|| !(zuletztgedrückt.equals(""))){ 
							
							tAnzeige.setText("");
							tAnzeige.setText("1");
							zuletztgedrückt=e.getActionCommand();
						}
						else{
							tAnzeige.setText(tAnzeige.getText() + e.getActionCommand());
							zuletztgedrückt=e.getActionCommand();
						}
					}
				}
		);
		
		b2.addActionListener (
				new ActionListener (){
					public void actionPerformed (ActionEvent e){
						if (tAnzeige.getText().equals("0")|| !(zuletztgedrückt.equals(""))){ 
							
							tAnzeige.setText("");
							tAnzeige.setText("2");
							zuletztgedrückt=e.getActionCommand();
						}
						else{
							tAnzeige.setText(tAnzeige.getText() + e.getActionCommand());
							zuletztgedrückt=e.getActionCommand();
						}
					}
				}
		);
		
		b3.addActionListener (
				new ActionListener (){
					public void actionPerformed (ActionEvent e){
						if (tAnzeige.getText().equals("0")||!(zuletztgedrückt.equals(""))){ 
							
							tAnzeige.setText("");
							tAnzeige.setText("3");
							zuletztgedrückt=e.getActionCommand();
						}
						else{
							tAnzeige.setText(tAnzeige.getText() + e.getActionCommand());
							zuletztgedrückt=e.getActionCommand();
						}
						}
				}
		);
		
		b4.addActionListener (
				new ActionListener (){
					public void actionPerformed (ActionEvent e){
						if (tAnzeige.getText().equals("0")||!(zuletztgedrückt.equals(""))){ 
							
							tAnzeige.setText("");
							tAnzeige.setText("4");
							zuletztgedrückt=e.getActionCommand();
						}
						else{
							tAnzeige.setText(tAnzeige.getText() + e.getActionCommand());
							zuletztgedrückt=e.getActionCommand();
						}
					}
				}
		);
		
		b5.addActionListener (
				new ActionListener (){
					public void actionPerformed (ActionEvent e){
						if (tAnzeige.getText().equals("0")||!(zuletztgedrückt.equals(""))){ 
							
							tAnzeige.setText("");
							tAnzeige.setText("5");
							zuletztgedrückt=e.getActionCommand();
						}
						else{
							tAnzeige.setText(tAnzeige.getText() + e.getActionCommand());
							zuletztgedrückt=e.getActionCommand();
					}
					
					}
				}
		);
		
		b6.addActionListener (
				new ActionListener (){
					public void actionPerformed (ActionEvent e){
						if (tAnzeige.getText().equals("0")||!(zuletztgedrückt.equals(""))){ 
							
							tAnzeige.setText("");
							tAnzeige.setText("6");
							zuletztgedrückt=e.getActionCommand();
						}
						else{
							tAnzeige.setText(tAnzeige.getText() + e.getActionCommand());
							zuletztgedrückt=e.getActionCommand();
						}
					}
				}
		);
		
		b7.addActionListener (
				new ActionListener (){
					public void actionPerformed (ActionEvent e){
						if (tAnzeige.getText().equals("0")||!(zuletztgedrückt.equals(""))){ 
							
							tAnzeige.setText("");
							tAnzeige.setText("7");
							zuletztgedrückt=e.getActionCommand();
						}
						else{
							tAnzeige.setText(tAnzeige.getText() + e.getActionCommand());
							zuletztgedrückt=e.getActionCommand();
						}
					}
				}
		);
		
		b8.addActionListener (
				new ActionListener (){
					public void actionPerformed (ActionEvent e){
						if (tAnzeige.getText().equals("0")||!(zuletztgedrückt.equals(""))){ 
							
							tAnzeige.setText("");
							tAnzeige.setText("8");
							zuletztgedrückt=e.getActionCommand();
						}
						else{
							tAnzeige.setText(tAnzeige.getText() + e.getActionCommand());
							zuletztgedrückt=e.getActionCommand();
						}
					}
				}
		);
		
		b9.addActionListener (
				new ActionListener (){
					public void actionPerformed (ActionEvent e){
						if (tAnzeige.getText().equals("0")||!(zuletztgedrückt.equals(""))){ 
							
							tAnzeige.setText("");
							tAnzeige.setText("9");
							zuletztgedrückt=e.getActionCommand();
						}
						else{
							tAnzeige.setText(tAnzeige.getText() + e.getActionCommand());
							zuletztgedrückt=e.getActionCommand();
						}
					}
				}
		);
		
		b0.addActionListener (
				new ActionListener (){
					public void actionPerformed (ActionEvent e){
						if (tAnzeige.getText().equals("0")||!(zuletztgedrückt.equals(""))){ 
							
							
							tAnzeige.setText("0");
							zuletztgedrückt=e.getActionCommand();
						}
						else{
							tAnzeige.setText(tAnzeige.getText() + e.getActionCommand());
							zuletztgedrückt=e.getActionCommand();
						}
					}
				}
		);
		
		bRücktaste.addActionListener( 
				new ActionListener (){
					
					public void actionPerformed (ActionEvent e){
						if (!(tAnzeige.getText().equals("0"))){
														
							String t = tAnzeige.getText();
							StringBuffer buf = new StringBuffer ();
							buf.append(new String (t));
						
						if (buf.length()!=1){
							
							 buf.deleteCharAt(t.length()-2);
							 t=buf.toString();
							 tAnzeige.setText(t);
						}
						else
							tAnzeige.setText("0");
						}	
					}
				}
		);
		
		bLöschen.addActionListener (
				new ActionListener (){
					public void actionPerformed (ActionEvent e){
						if (!(tAnzeige.getText().equals("0"))) 
							tAnzeige.setText("0");
							ergebnis=0;
					}
				}
		);
		
		bAusschalten.addActionListener (
				new ActionListener (){
					public void actionPerformed (ActionEvent e){
						System.exit(0);
					
					}
				}
		);
		bPlus.addActionListener(
				new ActionListener (){
					public void actionPerformed (ActionEvent e){
						zuletztgedrückt = e.getActionCommand();
						
						
						addiere ();
											
					}
					
				}
		);
				
		bIstgleich.addActionListener(
				new ActionListener (){
					
					public void actionPerformed (ActionEvent e){
						
						
						
						String result = Integer.toString(ergebnis);
						tAnzeige.setText(result);
						
						
					}
				}
		
		);
						
		pack ();
		setVisible (true);
	}
	
	public Insets getInsets () {
		
		return new Insets (40,15,15,15);
	}
	
	public void addiere (){
		
		if (zuletztgedrückt.equals("+")){
			
			int zahl =(Integer.parseInt(tAnzeige.getText())) ;
		
			ergebnis =ergebnis+ zahl;
			String z = Integer.toString(ergebnis);
			tAnzeige.setText(z);
		}
		
	}
	
	
	public static void main (String []args){
	
		new Taschenrechner ();
		
	}

}
 
Zuletzt bearbeitet:
Dein Fehler ist, dass du die Zahl erst einließt, wenn du auf + klickst.
Z.B. du klickst auf die 4 und klickst auf +, dann wird Ergebnis + 4 gerechnet. Wenn du anschließend auf eine andere zahl klickst, passiert nichts, außer, dass die Zahl im Textfeld angezeigt wird. wenn du dann auf gleich klickst, gibst du das ergebnis wieder aus, das immer noch 4 ist.
Klickst du jetzt wieder auf Plus, wird wieder die 4 aus dem Textfeld ausgelesen und ergebnis(4) + 4 gerechnet und dann 8 im Textfeld angezeigt.
Du solltest, dir die zahlen speichern, wenn du auf eine zahl klickst. Das Action-Command von den Rechenoperationen solltest du dir auch speichern und im einfachsten fall erst wenn du gleich klickst ausführen. d.h. erst zusammen rechnen wenn du auf = klickst.

Ich hoffe ich hab mich etwas verständlich ausgedrückt.
 
Danke vielmals zerix,

hatte auch den Verdacht, dass es am Speichern der Zahlen liegen könnte...

ich werde versuchen die Reihenfolge beim Speichern der Zahlen zu korrigieren, hoffe dass es endlich klappt.., also beim Klick auf einen Button die Zahl speichern,hmm am besten in ein Feld dann... werds auf jeden Fall mal auprobieren...

danke nochmals dafür, dass du dir Zeit genommen hast am späten Abend..:) ..
 
Zurück