mashine-obf
Mitglied
hey
studiere im 3 sem mathe
wir programmieren grad mit eclipse
und haben folgende aufgabe bekommen
http://www.tfh-berlin.de/~pries/Vorlesungen/DVG3/Uebungsaufgabe1.pdf
habe den scanner und frame erfolgreich geschrieben hoffe ich zummindest
meine frage kann mir jemand bei der verknüpfung und ausgabe der operators helfen?
vielen dank im vorraus
mfg marco
MainFrame.java :
/*
* Created on ...
*
* Interpreter Übung1
*/
package gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
/**
* @author mashine
*
* Interpreter Übung 1
*/
public class MainFrame extends JFrame implements ActionListener {
private Container _contentPane = null;
private JLabel _lblText1 = null;
//private JLabel _lblPlus = null;
//private JLabel _lblZahl2 = null;
private JTextField _txtAusdruck = null;
private JLabel _lblErgebnis = null;
private JButton _btnCheck = null;
private JButton _btnInit = null;
private JButton _btnClose = null;
private int _i1 = 0;
private int _i2 = 0;
public MainFrame() {
super("Interpreter");
_contentPane = getContentPane();
_contentPane.setLayout(null);
_lblText1 = new JLabel("Geben Sie den Ausdruck ein :");
_lblText1.setBounds(20, 30, 400, 20);
_contentPane.add(_lblText1);
/* _lblPlus = new JLabel("Ergebnis:");
_lblPlus.setBounds(160, 100, 20, 20);
_contentPane.add(_lblPlus);
_lblZahl2 = new JLabel();
_lblZahl2.setBounds(90, 30, 80, 20);
_contentPane.add(_lblZahl2);
*/
_txtAusdruck = new JTextField();
_txtAusdruck.setBounds(210, 20, 300, 30);
_contentPane.add(_txtAusdruck);
_lblErgebnis = new JLabel("Ergebnis :");
_lblErgebnis.setBounds(136, 60, 100, 20);
_contentPane.add(_lblErgebnis);
/* _btnCheck = new JButton("Prüfen");
_btnCheck.setBounds(20, 100, 120, 30);
_btnCheck.addActionListener(this);
_contentPane.add(_btnCheck);
*/
_btnInit = new JButton("Interpretieren");
_btnInit.setBounds(20, 140, 120, 30);
_btnInit.addActionListener(this);
_contentPane.add(_btnInit);
_btnClose = new JButton("Schließen");
_btnClose.setBounds(450, 140, 120, 30);
_btnClose.addActionListener(this);
_contentPane.add(_btnClose);
setSize(600, 240);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
// einzige Methode im Interface ActionListener
public void actionPerformed(ActionEvent e) {
// Ergänzen Sie hier den Code für die Aktionsabarbeitung
String cmd = e.getActionCommand();
if (cmd.equals("Schließen")) {
dispose();
System.exit(0);
} else if (cmd.equals("Interpretieren")) {
ArithmInterpreter interp = new ArithmInterpreter(_txtAusdruck.getText());
//Ergebnis im Fenster ausgeben
}
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e) {
System.out.println(e);
}
new MainFrame();
}
}
ArithmInterpreter.java
/*
* Created on ...
*
* Ein kleines Demo-Programm - Kopfrechnen
*/
package gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
/**
* @author mashine
*
* interpreter
*/
public class ArithmInterpreter {
private String strText = null;
private boolean bOK = true;
private double dErgebnis = 0;
private String strSyntax = null;
private StringTokenizer tokenlist = null;
private String strToken = null;
private boolean bFinish = false;
public ArithmInterpreter(String strArithmExpression)
{
//tokenlist erzeugen
//evtl ersten Token holen
//parseExpression
//ergebnis setzen
}
public boolean getOK()
{
return bOK;
}
private double parseTerm ()
{
double d=parseFactor();
boolean bMal=strToken.equals("*");
boolean bDurch=strToken.equals("/");
while (bOK&&(bMal||bDurch))
{
if (tokenlist.hasMoreTokens())
{
strToken = tokenlist.nextToken();
double d2 = parseFactor();
if (bMal)
d*=d2;
else
d /= d2;
bMal = strToken.equals ("*");
bDurch = strToken.equals ("/");
}
else
{
bOK =false;
strSyntax = "Fehler: beim eingeben * / ?";
}
}
return d;
}
private double parseExpression ()
{
double d = parseTerm();
boolean bPlus=strToken.equals("+");
boolean bMinus=strToken.equals("-");
while (bOK&&(bPlus||bMinus))
{
if (tokenlist.hasMoreTokens())
{
strToken = tokenlist.nextToken();
double d2 = parseFactor();
if (bPlus)
d+=d2;
else
d -= d2;
bPlus = strToken.equals ("+");
bMinus = strToken.equals ("-");
}
else
{
bOK =false;
strSyntax = "Fehler: beim eingeben + - ";
}
}
return d;
}
private double parseFactor()
{
double d;
//boolean bKlammerA=strToken.equals("(");
//boolean bKlammerZ=strToken.equals(")");
if ( strToken.equals("(") )
{
if ( tokenlist.hasMoreTokens() )
{
strToken= tokenlist.nextToken();
d = parseExpression();
if ( strToken.equals(")") )
{
if (tokenlist.hasMoreTokens())
{
strToken= tokenlist.nextToken();
}
else
bFinish = true;
}
else
{
bOK = false;
strSyntax = " Klammerausdruck is falsch";
}
}
else
{
d = 0.;
bOK = false;
strSyntax = "Fehler: Unerwartetes Ende nach (";
}
}
else {
d = Double.parseDouble(strToken);
strToken = tokenlist.nextToken();
}
return d ;
}
}
// private double parseDouble
studiere im 3 sem mathe
wir programmieren grad mit eclipse
und haben folgende aufgabe bekommen
http://www.tfh-berlin.de/~pries/Vorlesungen/DVG3/Uebungsaufgabe1.pdf
habe den scanner und frame erfolgreich geschrieben hoffe ich zummindest
meine frage kann mir jemand bei der verknüpfung und ausgabe der operators helfen?
vielen dank im vorraus
mfg marco
MainFrame.java :
/*
* Created on ...
*
* Interpreter Übung1
*/
package gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
/**
* @author mashine
*
* Interpreter Übung 1
*/
public class MainFrame extends JFrame implements ActionListener {
private Container _contentPane = null;
private JLabel _lblText1 = null;
//private JLabel _lblPlus = null;
//private JLabel _lblZahl2 = null;
private JTextField _txtAusdruck = null;
private JLabel _lblErgebnis = null;
private JButton _btnCheck = null;
private JButton _btnInit = null;
private JButton _btnClose = null;
private int _i1 = 0;
private int _i2 = 0;
public MainFrame() {
super("Interpreter");
_contentPane = getContentPane();
_contentPane.setLayout(null);
_lblText1 = new JLabel("Geben Sie den Ausdruck ein :");
_lblText1.setBounds(20, 30, 400, 20);
_contentPane.add(_lblText1);
/* _lblPlus = new JLabel("Ergebnis:");
_lblPlus.setBounds(160, 100, 20, 20);
_contentPane.add(_lblPlus);
_lblZahl2 = new JLabel();
_lblZahl2.setBounds(90, 30, 80, 20);
_contentPane.add(_lblZahl2);
*/
_txtAusdruck = new JTextField();
_txtAusdruck.setBounds(210, 20, 300, 30);
_contentPane.add(_txtAusdruck);
_lblErgebnis = new JLabel("Ergebnis :");
_lblErgebnis.setBounds(136, 60, 100, 20);
_contentPane.add(_lblErgebnis);
/* _btnCheck = new JButton("Prüfen");
_btnCheck.setBounds(20, 100, 120, 30);
_btnCheck.addActionListener(this);
_contentPane.add(_btnCheck);
*/
_btnInit = new JButton("Interpretieren");
_btnInit.setBounds(20, 140, 120, 30);
_btnInit.addActionListener(this);
_contentPane.add(_btnInit);
_btnClose = new JButton("Schließen");
_btnClose.setBounds(450, 140, 120, 30);
_btnClose.addActionListener(this);
_contentPane.add(_btnClose);
setSize(600, 240);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
// einzige Methode im Interface ActionListener
public void actionPerformed(ActionEvent e) {
// Ergänzen Sie hier den Code für die Aktionsabarbeitung
String cmd = e.getActionCommand();
if (cmd.equals("Schließen")) {
dispose();
System.exit(0);
} else if (cmd.equals("Interpretieren")) {
ArithmInterpreter interp = new ArithmInterpreter(_txtAusdruck.getText());
//Ergebnis im Fenster ausgeben
}
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e) {
System.out.println(e);
}
new MainFrame();
}
}
ArithmInterpreter.java
/*
* Created on ...
*
* Ein kleines Demo-Programm - Kopfrechnen
*/
package gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
/**
* @author mashine
*
* interpreter
*/
public class ArithmInterpreter {
private String strText = null;
private boolean bOK = true;
private double dErgebnis = 0;
private String strSyntax = null;
private StringTokenizer tokenlist = null;
private String strToken = null;
private boolean bFinish = false;
public ArithmInterpreter(String strArithmExpression)
{
//tokenlist erzeugen
//evtl ersten Token holen
//parseExpression
//ergebnis setzen
}
public boolean getOK()
{
return bOK;
}
private double parseTerm ()
{
double d=parseFactor();
boolean bMal=strToken.equals("*");
boolean bDurch=strToken.equals("/");
while (bOK&&(bMal||bDurch))
{
if (tokenlist.hasMoreTokens())
{
strToken = tokenlist.nextToken();
double d2 = parseFactor();
if (bMal)
d*=d2;
else
d /= d2;
bMal = strToken.equals ("*");
bDurch = strToken.equals ("/");
}
else
{
bOK =false;
strSyntax = "Fehler: beim eingeben * / ?";
}
}
return d;
}
private double parseExpression ()
{
double d = parseTerm();
boolean bPlus=strToken.equals("+");
boolean bMinus=strToken.equals("-");
while (bOK&&(bPlus||bMinus))
{
if (tokenlist.hasMoreTokens())
{
strToken = tokenlist.nextToken();
double d2 = parseFactor();
if (bPlus)
d+=d2;
else
d -= d2;
bPlus = strToken.equals ("+");
bMinus = strToken.equals ("-");
}
else
{
bOK =false;
strSyntax = "Fehler: beim eingeben + - ";
}
}
return d;
}
private double parseFactor()
{
double d;
//boolean bKlammerA=strToken.equals("(");
//boolean bKlammerZ=strToken.equals(")");
if ( strToken.equals("(") )
{
if ( tokenlist.hasMoreTokens() )
{
strToken= tokenlist.nextToken();
d = parseExpression();
if ( strToken.equals(")") )
{
if (tokenlist.hasMoreTokens())
{
strToken= tokenlist.nextToken();
}
else
bFinish = true;
}
else
{
bOK = false;
strSyntax = " Klammerausdruck is falsch";
}
}
else
{
d = 0.;
bOK = false;
strSyntax = "Fehler: Unerwartetes Ende nach (";
}
}
else {
d = Double.parseDouble(strToken);
strToken = tokenlist.nextToken();
}
return d ;
}
}
// private double parseDouble