Rechner für Grundrechenarten

Neue Frage »

Auf diesen Beitrag antworten »
flyflo01 Rechner für Grundrechenarten

Meine Frage:
Hallo,

wir sollen haben in der Schule angefangen einen Rechner für Grundrechenarten zu schreiben. Einen Lösungsvorschlag mit dem größten Teil des Programmes haben wir schon bekommen, doch leider habe ich nun noch ein abschließendes Problem.

Und zwar weiß ich nicht, wie ich den eingegebenen String dem Programm zum Rechnen gebe. (hoffe dass man es so formulieren kann)

Meine Ideen:
Das ist der Quellcode bisher:

package grundrechner;

import java.awt.*;
import java.awt.event.*;
import java.awt.PopupMenu.*;

/**
*
* @author Florian
*/
public class Rechner extends Frame {

private String eingabeZahl;
private double ergebnis;
private MeinActionListener mal = new MeinActionListener();
private TextField texta = new TextField();
private Button ausrechnen = new Button();
private TextField textb = new TextField();


public Rechner() {
this.setBackground(Color.gray);
this.setLayout(null);
this.addWindowListener( new MainFrameWindowAdapter());
this.add(texta);
texta.setSize(300, 50);
texta.setLocation(50,50);
texta.setText("Eingabe:");
this.add(ausrechnen);
ausrechnen.setSize(75,50);
ausrechnen.setLabel("Ausrechnen");
ausrechnen.addActionListener(mal);
ausrechnen.setLocation(275,150);
this.add(textb);
textb.setSize(300,50);
textb.setText("Lösung:");
textb.setLocation(50,250);
}

private double getFunktionswert(){
return ergebnis;
}
public void berechne(String eingabe){
eingabeZahl="("+eingabe+")";
}
public boolean korrekt(){
if (eingabeZahl.length()==0) return true;
return false;
}
public String getError(){
return eingabeZahl;
}
public void delfirst(){
int k = eingabeZahl.length();
eingabeZahl=eingabeZahl.substring(1,k);
}
public void delfirst(int m){
int k = eingabeZahl.length();
eingabeZahl=eingabeZahl.substring(m,k);
}
public void error(){
eingabeZahl="Error:"+eingabeZahl;
}

public double signum(){
if (eingabeZahl.startsWith("Error")) return 0;
if (eingabeZahl.length()==0) { error(); return 0;
}
if (eingabeZahl.charAt(0)=='-') {
delfirst();
return -1.0;}
else if (eingabeZahl.charAt(0)=='+') {
delfirst();
return 1.0;}
else return 1.0;
}

public double term(){
if (eingabeZahl.startsWith("Error")) return 0;
char ch;
double ergf1=0;
double ergf2=0;
ergf1=faktor();
if (eingabeZahl.length()==0) { error(); return 0;}
while (eingabeZahl.startsWith("*")||(eingabeZahl.startsWith("/")))
{ ch=eingabeZahl.charAt(0);
delfirst();
ergf2=faktor();
if (ch=='*')ergf1=ergf1*ergf2;
if (ch=='/')ergf1=ergf1/ergf2;}
return ergf1;
}

public double ausdruck(){
if (eingabeZahl.startsWith("Error")) return 0;
if (eingabeZahl.charAt(0)=='(')
delfirst(); else error();
if (eingabeZahl.length()==0) { error(); return 0;}
double ergs=signum();
double ergt1=term();
ergt1=ergt1*ergs;
while (eingabeZahl.startsWith("+")||(eingabeZahl.startsWith("-")))
{char ch=eingabeZahl.charAt(0);
delfirst();
double ergt2=term();
if (ch=='+')ergt1=ergt1+ergt2;
if (ch=='-')ergt1=ergt1-ergt2;
}
if (eingabeZahl.charAt(0)==')')
delfirst();
else if (! eingabeZahl.startsWith("Error"))error();
return ergt1;

}



public double faktor(){
if (eingabeZahl.startsWith("Error")) return 0;
double erg=0;
boolean geht=false;
int laenge;
String sust;
if (eingabeZahl.length()==0) { error(); return 0;}
if (eingabeZahl.startsWith("(")){
erg=ausdruck();
return erg;
}
laenge=eingabeZahl.length();
for (int i=1; i<laenge;i++) {
sust=eingabeZahl.substring(0,laenge-i);
try{
erg=Double.parseDouble(sust);
}
catch(java.lang.NumberFormatException e){
geht=false;
continue;
}
geht=true;
eingabeZahl=eingabeZahl.substring(laenge-i,laenge);
break;

}
//double fa=0;
//if(geht==false) erg=fa();
return erg;
}



private class MainFrameWindowAdapter extends WindowAdapter{
public void windowClosing (WindowEvent e){
System.exit(0);
}
}

private class MeinActionListener implements ActionListener{
public void actionPerformed (ActionEvent e){
textb.setText(eingabeZahl);}}


}




Geht es vl mit einem zweiten ActionListener??? Doch was für einen Auftrag soll ich diesem geben?

Hoffe ihr könnt mit helfen...
 
Auf diesen Beitrag antworten »
aal

Ich habe den Code nicht angeschaut,aber deine Frage lösst sich so beantworten.

.getText() ..Text von dem TestField bekommen
.setText() .........Text setzen

dann einfach so String antwort = feld1.getText();
um mit dem String zu rechnen einfach parsen ( zu int oder double) ;D
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »