Taschenrechnerproblem

easy_goinq

Grünschnabel
Hallo,

ich habe ein Problem mit den "Buttonklickaktionen" in meinem java-Taschenrechner.

Das Layout ist fertig und wenn man einen Zahlbutton (bsp. 1) drückt, wird die Zahl auch im Textfeld angezeigt.
Sobald man die Zahl eingegeben hat, will man ja eine Rechenaktion durchführen (+ , -..etc).
Da das Textfeld für die nächste Zahl wieder gelöscht werden muss habe ich geschrieben:

Code

if(e.getSource()== keyplus){ // keyplus ist die "+" taste
text_nummer.setText(""); // text_nummer ist das Textfeld wo die Zahl steht
}

Aber bevor ich das Textfeld lösche muss ich den Wert speichern und da bin ich mit meinen Javakenntnissen am Ende. Ich hab keine Ahnung wie ich das machen soll. Habe schon nen Kumpel gefragt, der meinte mit Arrays, konnte mir dann aber nicht mehr erklären wie, weil er weg musste. Und wenn ich danach google, komme ich nur auf fertige Codes, die ich nicht verstehe und einfach kopieren will ich auch nicht.

Ich hoffe ihr könnt mir helfen.

P.S.: Ich lerne java grade erst in der Schule (erste Halbjahr) und sowas wurde uns noch nicht beigebracht (zum Thema: ich soll besser aufpassen^^).
 
Du fragst mit getText den Text aus dem Textfeld ab und parst diesen dann je nachdem ob es eine Ganzzahl oder eine Fliesskommazahl ist mit Integer.parseInt(text) oder Double.parseDouble(text) und legst das dann in einem Feld in deiner Klasse ab.
 
wenn ich das richitg verstanden hab, will er in das textfeld nur die gedrückte taste schreiben, dh. parsen ist überflüssig.
wenn du zahlen speichern willst und weißt wieviele es werden kannst du einen array verwenden:

Java:
int[] speicher=new int[laenge];
int[pos]=zahl;

wenn dir die länge noch nicht bekannt ist, nimm eine liste, zb. LinkedList:
Java:
import java.util.*
...
LinkedList speicher=new LinkedList();
speicher.add(new Integer(zahl));//hinten anhängen
zahl=(int)speicher.get(pos);

für den taschenrechner würde ich das aber anders machen. man braucht ja nur maximal 2 variablen: vorne und hinten. gibt man also die erste ziffer ein, rechne die erste variable *10 und addiere die neue ziffer. kommt ein rechenzeichen, wird das selbe nur mit der 2. variable gemacht. bei "=" einfach rechnen (dazu muss man natürlich das rechenzeichen merken).

könnte so aussehen:
Java:
int vara=0;
int varb=0;
int rechenzeichen=-1;

public void addZiffer(int ziffer) {
if (rechenzeichen<0) vara=vara*10+ziffer;
else varb=varb*10+ziffer;
}

public void rechenzeichen(char c) {
if (c=='+') rechenzeichen=1;
else if ...
}
public int ergebnis() {
if (rechenzeichen==1) return vara+varb;
else if ...
}
 
Zuletzt bearbeitet:
Also, ich empfehle Arrays:

Das würde dann so aussehen:

Code:
Vector v = new Vector();
.
.
.
if(e.getSource()== keyplus){ // keyplus ist die "+" taste
v.add(text_nummer);
text_nummer.setText(""); // text_nummer ist das Textfeld wo die Zahl steht
}

Vectoren sind beliebig erweiterbar. Du musst die Länge wie bei einem Array nicht kennen.

Aber Warum?

ich würde doch sagen das volgendes besser wäre:

Code:
double ergebnis = 0;
.
.
.
if(e.getSource()== keyplus){ 
ergebniss+=Double.valueOf(text_nummer.getText());}

if(e.getSource()== minuskey){ ergebniss-=Double.valueOf(text_nummer.getText());}

if(e.getSource()== malkey){ ergebniss*=Double.valueOf(text_nummer.getText());}

if(e.getSource()== divkey){ ergebniss/=Double.valueOf(text_nummer.getText());}
v.add(text_nummer);
text_nummer.setText("");
 
ich habe es jetzt mit arrays gelöst. bin irgendwie selbst auf eine lösungsmöglichkeit gekommen.

allerdings kann man jetzt nur 2 werte zusammenrechnen
wert1 +(- / *) wert2 = ergebnis

außerdem löscht der rechner das textfeld, wenn das ergebnis drin steht und man eine neue zahl eingeben will.

2 fragen:

1. wie rechnet man mit potenzen?
2. wie bekomme ich es hin beliebig viele rechenschritte auszuführen (z.B. 4 werte zusammenrechen)?
Edit: geht es vllt so wie Busi es geschrieben hat? Ich probier es einfach mal aus.
 
Zuletzt bearbeitet:
Das Problem mit dem Zusammenrechnen von mehreren Zahlen habe ich auch.
Mein Lösungsansatz war, einfach einen boolean mit den Rechenoperationen zu verknüpfen.
Wenn das erste mal ein Operator gedrückt wird, wird der boolean auf true gesetzt, und wenn dann nochmal ein Operator gedrückt wird, wird abgefragt ob der boolean auf true steht und wenn ja, sollen die vorherigen Werte zusammengerechnet werden und dann ein neu eingegebener hinzukommen (mit dem entsprechenden Operator).
Soweit die Theorie, praktisch funktioniert das ganze aber noch nicht, wobei ich ehrlich gesagt noch nicht wirklich viel weiter dran gemacht habe, weil es wichtigeres gab;)
 
ich hab das mit ner neuen double variable versucht.
so dass ich beim drücken des operator den betrag in dem double speicher und dann das textfeld lösche und wieder neue zahlen dann eingebe und auch das rechenzeichen beachtetbwird...

nur is das glaub ich nicht so ganz möglich, weil ich, wie ich es mir vorstelle, nur ab und zu schon beim operator drücken ein ergebnis haben^^

und wenn ich jetzt "+" drücke, kommt eine konsole mit ganz viel rotem text xD

das ist nich ganz einfach,. wenn man seit anfang dieses schuljahres erst java lernt xD



EDIT: Hab es irgendwie doch hinbekommen, heute in Informatik funktionierte er einwandfrei... keine Ahnung warum auf einmal, aber okay.

Trotzdem vielen Dank an alle, die versucht haben mir zu helfen.
 
Zuletzt bearbeitet:
Zurück