Abhängigkeiten zweier Klassen

Status
Nicht offen für weitere Antworten.

innoc

Aktives Mitglied
Ich habe zwei Klassen, die sich gegenseitig referenzieren, was natürlich zu Problemen beim Kompilieren führt. Ich würde ja gerne beide Klassen zu einer einzigen Klasse vereinigen, aber die eine Klasse extendiert Button und die andere Panel. Hat jemand eine Idee, wie ich es bei einer Klasse hinbekomme, sowohl die Attribute und Methoden von Button als auch von Panel in der Klasse zu implementieren?

Hier der Code:

Java:
class OperationsButton extends Button {
      private String typ;
      private RechnerRahmen rahmen;
      public OperationsButton(String typ, Rechnerrahmen rahmen) {
	  super(typ);
	  this.typ = typ;
	  this.rahmen = rahmen;
	  this.addActionListener(new OperationsListener());
      }
      class OperationsListener implements ActionListener {
	  public OperationsListener() {
	       super();
	  }
	  public void actionPerformed(ActionEvent e) {
	      System.out.println("OperationsButton "+typ+" aufgerufen");
	      rahmen.berechnen(typ);
	  }
      }
 }


Java:
class RechnerRahmen extends Panel {
      public RechnerRahmen() {
           super();
           eingabe = new TextField("",20);
           ZiffernButton ziffern[] = new ZiffernButton[10];
           for (int i=0;i<10;i++) ziffern[i] = new ZiffernButton(i,eingabe);
           OperationsButton op[] = new OperationsButton[3];
           op[0] = new OperationsButton("+",this);
           op[1] = new OperationsButton("-",this);
           op[2] = new OperationsButton("*",this);
           op[3] = new OperationsButton("=",this);
           Panel ziffernRahmen = new Panel(new GridLayout(2,5));
           for(int i=0;i<10;i++) ziffernRahmen.add(ziffern[i]);
           Panel opRahmen = new Panel(new GridLayout(1,4));
           for(int i=0;i<4;i++) opRahmen.add(op[i]);
           this.add("North",eingabe);
           this.add("Center",ziffernRahmen);
           this.add("South",opRahmen); 
      }
}
 
Zuletzt bearbeitet von einem Moderator:

Schandro

Top Contributor
Hat jemand eine Idee, wie ich es bei einer Klasse hinbekomme, sowohl die Attribute und Methoden von Button als auch von Panel in der Klasse zu implementieren?
Vergiss es, sowas geht nicht in Java (keine Mehrfachvererbung) und es ist grottenschlechter Stil.

Entweder du schreibst den Konstruktor von OperationButton so um, das er z.b. irgendeinen (von dir selbsdefinierten?) Listener erwartet. Das wär auch vom Stil her besser, dann brauchen die OperationButton keine Referenz auf den gesamte "RechenRahmen"^^ zu haben.

Oder du benutzt z.b. ne IDE wie Eclipse, die zwei sich gegenseitig benutzende Klassen compilen kann.
 

innoc

Aktives Mitglied
Wie und wo implementiere ich den Listener. Ist das dann ein Action- oder ein Windowlistener, und wird der dann direkt im Konstruktor eingesetzt? Wie initialisiere ich dann rahmen, das muss doch dann vor dem Konstruktor geschehen, oder?
Ich hab das, was du mir empfohlen hast, wie folgt umzusetzen versucht, aber ohne Erfolg:

class OperationsButton extends Button {
private String typ;
private RechnerRahmen rahmen;
public OperationsButton(String typ, RechnerRahmen rahmen) {
super(typ);
this.typ = typ;
this.rahmen = rahmen;
this.addActionListener(new ActionListener());
this.addActionListener(new OperationsListener());
}
class ActionListener {
public void actionPerformed(ActionEvent e) {
RechnerRahmen rahmen = new RechnerRahmen();
}
}
class OperationsListener implements ActionListener {
public OperationsListener() {
super();
}
public void actionPerformed(ActionEvent e) {
System.out.println("OperationsButton "+typ+" aufgerufen");
rahmen.berechnen(typ);
}
}
}

Ist wahrscheinlich ziemlich mieser Code, aber kann zumindest dazu dienen, dass ich den Tip von Schandro verstehe.
 

Marco13

Top Contributor
Es sollte auch bei sich gegenseitig referenzierenden Klassen kein Problem mit dem Compilieren geben. Beschreibe dein Problem ggf. genauer.
 

innoc

Aktives Mitglied
Ich will eine GUI für einen Taschenrechner mittels AWT entwickeln. Zur Implementierung der Ziffernbuttons gibt es die Klasse ZiffernButton, für die Operatoren, nur +,-,*,= momentan, die Klasse OperationsButton. Der übergeordnete Rahmen soll über die Klasse RechnerRahmen realisiert werden. Der gesamte Programmcode ist unten aufgeführt. Der Kompiler beschwert sich, dass er RechnerRahmen in der Klasse OperationsButton nicht kennt. Ich habe aber keine Idee, wie ich ihm an dieser Stelle RechnerRahmen "beibringen" kann.

Der vollständige Code lautet:

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

public class Rechner extends Frame {

private BorderLayout borderLayout1 = new BorderLayout();


public Rechner() {


this.setLayout(borderLayout1);
this.setSize (150,200);
this.setLocation (100,100);
this.setBackground (Color.gray);


class ZiffernButton extends Button {
private int nr;
TextField eingabe;
public ZiffernButton (int nr, TextField eingabe) {
super(""+nr);
this.nr = nr;
this.eingabe = eingabe;
this.addActionListener(new ZiffernListener());
}
class ZiffernListener implements ActionListener {
private String text = new String();
public ZiffernListener() {
super();
}
public void actionPerformed (ActionEvent e) {
System.out.println ("ZiffernButton "+nr+" aufgerufen");
text = eingabe.getText();
//*** evtl. Test auf fehlerhafte Zeichenkette
text = text + nr;
eingabe.setText(text);
}
}
}


class OperationsButton extends Button {
private String typ;
private RechnerRahmen rahmen;
public OperationsButton(String typ, RechnerRahmen rahmen) {
super(typ);
this.typ = typ;
this.rahmen = rahmen;
this.addActionListener(new OperationsListener());
}
class OperationsListener implements ActionListener {
public OperationsListener() {
super();
}
public void actionPerformed(ActionEvent e) {
System.out.println("OperationsButton "+typ+" aufgerufen");
rahmen.berechnen(typ);
}
}
}


class RechnerRahmen extends Panel {
public RechnerRahmen() {
super();
eingabe = new TextField("",20);
ZiffernButton ziffern[] = new ZiffernButton[10];
for (int i=0;i<10;i++) ziffern = new ZiffernButton(i,eingabe);
OperationsButton op[] = new OperationsButton[3];
op[0] = new OperationsButton("+",this);
op[1] = new OperationsButton("-",this);
op[2] = new OperationsButton("*",this);
op[3] = new OperationsButton("=",this);
Panel ziffernRahmen = new Panel(new GridLayout(2,5));
for(int i=0;i<10;i++) ziffernRahmen.add(ziffern);
Panel opRahmen = new Panel(new GridLayout(1,4));
for(int i=0;i<4;i++) opRahmen.add(op);
this.add("North",eingabe);
this.add("Center",ziffernRahmen);
this.add("South",opRahmen);
}
}



}

public static void main (String argv[]) {

Rechner rechner = new Rechner();
rechner.addWindowListener(new WindowAdapter() {
public void windowClosing (WindowEvent e) {
System.exit (0);
}
});
rechner.setVisible (true);
}
}
 

Marco13

Top Contributor
Hmja, irgendwie sind da wohl einige Klassen irgendwo hingerutscht, wo sie nicht hingehören. Ein bißchen Sokoban spielen liefert
Code:
import java.awt.*;
import java.awt.event.*;

public class Rechner extends Frame {

private BorderLayout borderLayout1 = new BorderLayout();


public Rechner() {


this.setLayout(borderLayout1);
this.setSize (150,200);
this.setLocation (100,100);
this.setBackground (Color.gray);
add(new RechnerRahmen());

}

TextField eingabe;

class ZiffernButton extends Button {
private int nr;
public ZiffernButton (int nr) {
super(""+nr);
this.nr = nr;
this.addActionListener(new ZiffernListener());
}
class ZiffernListener implements ActionListener {
private String text = new String();
public ZiffernListener() {
super();
}
public void actionPerformed (ActionEvent e) {
System.out.println ("ZiffernButton "+nr+" aufgerufen");
text = eingabe.getText();
//*** evtl. Test auf fehlerhafte Zeichenkette
text = text + nr;
eingabe.setText(text);
}
}
}

class OperationsButton extends Button {
private String typ;
private RechnerRahmen rahmen;
public OperationsButton(String typ, RechnerRahmen rahmen) {
super(typ);
this.typ = typ;
this.rahmen = rahmen;
this.addActionListener(new OperationsListener());
}
class OperationsListener implements ActionListener {
public OperationsListener() {
super();
}
public void actionPerformed(ActionEvent e) {
System.out.println("OperationsButton "+typ+" aufgerufen");
//rahmen.berechnen(typ);
}
}
}


class RechnerRahmen extends Panel {
public RechnerRahmen() {
super();
eingabe = new TextField("",20);
ZiffernButton ziffern[] = new ZiffernButton[10];
for (int i=0;i<10;i++) ziffern[i] = new ZiffernButton(i);
OperationsButton op[] = new OperationsButton[4];
op[0] = new OperationsButton("+",this);
op[1] = new OperationsButton("-",this);
op[2] = new OperationsButton("*",this);
op[3] = new OperationsButton("=",this);
Panel ziffernRahmen = new Panel(new GridLayout(2,5));
for(int i=0;i<10;i++) ziffernRahmen.add(ziffern[i]);
Panel opRahmen = new Panel(new GridLayout(1,4));
for(int i=0;i<4;i++) opRahmen.add(op[i]);
this.add("North",eingabe);
this.add("Center",ziffernRahmen);
this.add("South",opRahmen);
}
}





public static void main (String argv[]) {

Rechner rechner = new Rechner();
rechner.addWindowListener(new WindowAdapter() {
public void windowClosing (WindowEvent e) {
System.exit (0);
}
});
rechner.setVisible (true);
}
}

Ich hätte es ja kurz in Eclipse einfügen können, um die Einrückung zu korrigieren, aber ich denk' ja nicht dran - ist ja DEIN Code... :rolleyes:
 

innoc

Aktives Mitglied
Danke an Marco13. Jetzt bekomme ich das Programm kompiliert.
Nun aber stellt sich die nächste Frage: Ich gebe über die Ziffernbuttons Ziffern ein. Diese werden im Textfeld als eine lange Zahlenfolge ausgegeben. Wie schaffe ich es nun, das Programm so zu verändern, dass 1. beim Drücken eines Operationsbutton die angezeigte Ziffernfolge als 1. Argument der Zahlenoperation gespeichert wird und 2. das Textfeld für die dem Operator nachfolgende Zifferneingabe wieder freigemacht wird, ich also wieder mit einem leeren Textfeld beginnen kann. Die Eingabe muss somit zwischen dem Drücken von Ziffern- und Operationsbuttons unterscheiden. Auf diese Weise könnte ich dann die Rechenoperationen über ein switch-case-Konstrukt implementieren. Brauche ich hierfür eine weitere Klasse und einen zusätzlichen ActionListener? Oder kann sowas mit den bestehenden Klassen realisiert werden?

Der aktuelle Programmcode lautet wie folgt:

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

public class Rechner extends Frame {

private BorderLayout borderLayout1 = new BorderLayout();


public Rechner() {


this.setLayout(borderLayout1);
this.setSize (150,200);
this.setLocation (100,100);
this.setBackground (Color.gray);
add(new RechnerRahmen());

}

TextField eingabe;

class ZiffernButton extends Button {
private int nr;
public ZiffernButton (int nr) {
super(""+nr);
this.nr = nr;
this.addActionListener(new ZiffernListener());
}
class ZiffernListener implements ActionListener {
private String text = new String();
public ZiffernListener() {
super();
}
public void actionPerformed (ActionEvent e) {
System.out.println ("ZiffernButton "+nr+" aufgerufen");
text = eingabe.getText();
//*** evtl. Test auf fehlerhafte Zeichenkette
text = text + nr;
eingabe.setText(text);
}
}
}

class OperationsButton extends Button {
private String typ;
private RechnerRahmen rahmen;
public OperationsButton(String typ, RechnerRahmen rahmen) {
super(typ);
this.typ = typ;
this.rahmen = rahmen;
this.addActionListener(new OperationsListener());
}
class OperationsListener implements ActionListener {
public OperationsListener() {
super();
}
public void actionPerformed(ActionEvent e) {
System.out.println("OperationsButton "+typ+" aufgerufen");
}
}
}


class RechnerRahmen extends Panel {
public RechnerRahmen() {
super();
eingabe = new TextField("",20);
eingabe.setEditable(false);
eingabe.setText(String.valueOf(0));
eingabe.setBackground(Color.white);
ZiffernButton ziffern[] = new ZiffernButton[10];
for (int i=0;i<10;i++) ziffern = new ZiffernButton(i);
OperationsButton op[] = new OperationsButton[4];
op[0] = new OperationsButton("+",this);
op[1] = new OperationsButton("-",this);
op[2] = new OperationsButton("*",this);
op[3] = new OperationsButton("=",this);
Panel ziffernRahmen = new Panel(new GridLayout(2,5));
for(int i=0;i<10;i++) ziffernRahmen.add(ziffern);
Panel opRahmen = new Panel(new GridLayout(1,4));
for(int i=0;i<4;i++) opRahmen.add(op);
this.add("North",eingabe);
this.add("Center",ziffernRahmen);
this.add("South",opRahmen);
}
}


public static void main (String argv[]) {

Rechner rechner = new Rechner();
rechner.addWindowListener(new WindowAdapter() {
public void windowClosing (WindowEvent e) {
System.exit (0);
}
});
rechner.setVisible (true);
}
}
 

Marco13

Top Contributor
Sollte das nicht einfach da gemacht werden können, wo
System.out.println("OperationsButton "+typ+" aufgerufen");
steht?
 

innoc

Aktives Mitglied
OK, dank Marco13 bin ich mit dem Programm ein Stück weiter gekommen. Jetzt stellt sich mir allerdings wieder ein neues Problem in den Weg:
Ich habe folgenden Code in die Klasse OperationsListener eingefügt:

class OperationsListener implements ActionListener {
public OperationsListener() {
super();
}
public void actionPerformed(ActionEvent e) {
int zahl = 0;
if (e.getActionCommand().equals(typ)) {
zahl = Integer.parseInt(eingabe.getText());
eingabe.setText("");
}
System.out.println(zahl);
}
}

Dadurch bekomme ich auch die Eingabe im Textfeld in die Variable zahl gespeichert. Nun habe ich aber alles mögliche versucht, mir über den gleichen ActionListener auch die zweite Zahl für meine Rechenoperationen ausgeben zu lassen, denn ich will ja zu folgendem Ergebnis kommen: result = zahl1 op zahl2. Bei meinen erfolglosen Versuchen wurde entweder die Zahlenfolge, die ich in zahl1 gespeichert habe, in zahl2 einfach weitergeführt, also statt zahl1=12 und zahl2=56: zahl1=12 und zahl2=1256, oder zahl2 hat mir den in zahl1 abgespeicherten Zahlenwert einfach überschrieben. Ich bin jetzt doch ziemlich ratlos. Vielleicht hat jemand von Euch eine zündende Idee.

Anbei der komplette Programmcode (hatte allerdings bisher noch nicht die Zeit, diesen richtig einzurücken)
import java.awt.*;
import java.awt.event.*;

public class Rechner extends Frame {

private BorderLayout borderLayout1 = new BorderLayout();


public Rechner() {


this.setLayout(borderLayout1);
this.setSize (150,200);
this.setLocation (100,100);
this.setBackground (Color.gray);
add(new RechnerRahmen());

}

TextField eingabe;

class ZiffernButton extends Button {
private int nr;
public ZiffernButton (int nr) {
super(""+nr);
this.nr = nr;
this.addActionListener(new ZiffernListener());
}
class ZiffernListener implements ActionListener {
private String text = new String();
public ZiffernListener() {
super();
}
public void actionPerformed (ActionEvent e) {
System.out.println ("ZiffernButton "+nr+" aufgerufen");
text = eingabe.getText();
//*** evtl. Test auf fehlerhafte Zeichenkette
text = text + nr;
eingabe.setText(text);
}
}
}

class OperationsButton extends Button {
private String typ;
private RechnerRahmen rahmen;
public OperationsButton(String typ, RechnerRahmen rahmen) {
super(typ);
this.typ = typ;
this.rahmen = rahmen;
this.addActionListener(new OperationsListener());
}
class OperationsListener implements ActionListener {
public OperationsListener() {
super();
}
public void actionPerformed(ActionEvent e) {
int zahl = 0;
if (e.getActionCommand().equals(typ)) {
zahl = Integer.parseInt(eingabe.getText());
eingabe.setText("");
}
System.out.println(zahl);
}
}
}



class RechnerRahmen extends Panel {
public RechnerRahmen() {
super();
eingabe = new TextField("",20);
eingabe.setEditable(false);
eingabe.setText(String.valueOf(0));
eingabe.setBackground(Color.white);
ZiffernButton ziffern[] = new ZiffernButton[10];
for (int i=0;i<10;i++) ziffern = new ZiffernButton(i);
OperationsButton op[] = new OperationsButton[4];
op[0] = new OperationsButton("+",this);
op[1] = new OperationsButton("-",this);
op[2] = new OperationsButton("*",this);
op[3] = new OperationsButton("=",this);
Panel ziffernRahmen = new Panel(new GridLayout(2,5));
for(int i=0;i<10;i++) ziffernRahmen.add(ziffern);
Panel opRahmen = new Panel(new GridLayout(1,4));
for(int i=0;i<4;i++) opRahmen.add(op);
this.add("North",eingabe);
this.add("Center",ziffernRahmen);
this.add("South",opRahmen);
}
}


public static void main (String argv[]) {

Rechner rechner = new Rechner();
rechner.addWindowListener(new WindowAdapter() {
public void windowClosing (WindowEvent e) {
System.exit (0);
}
});
rechner.setVisible (true);
}
}
 

Marco13

Top Contributor
In erster Näherung würde es schon reichen, die
int zahl = 0;
direkt in die Rechner-Klasse zu legen.

Trotzdem wirst du dir GENAU überlegen müssen, wie der Ablauf sein soll, wenn nacheinander verschiedene Knöpfe gedrückt werden... Spätestens bei "Punkt-Vor-Strich" wird das ganze etwas komplizierter. Da wirst du dir vermutlich mehrere eingegebene Zahlen und Operatoren in einer Liste Speichern müssen, bis du sicher sein kannst, dass du das ganze Auswerten darfst.
 

innoc

Aktives Mitglied
Stellt sich das Problem "Punkt-vor-Strich" nicht immer? Man kann es doch nur umgehen, indem man eine Art Klammerung implementiert, oder unterschiedliche Klassen für Punkt- und Strich-Operatoren. Ist es daher besser, die Klasse der OperatorenButtons in die einzelnen Operatoren aufzuteilen? Oder gibt es da ein besseres "Programmdesign"?
 

innoc

Aktives Mitglied
OK, gut Tipp von Landei.
Wie sieht es mit dieser Umsetzung aus:
Ich initialisiere zahl1 und zahl2 direkt in der Rechner-Klasse.
Die Zuordnung der Eingabestrings zu zahl1 und zahl2 erledige ich im ActionListener der OperationsButtons.
Die eigentliche Rechenoperation wird nach dem Muster (Operator, Zahl1, Zahl2) in der Klasse Rechner durchgeführt (Klasse mit switch-case-Konstrukt?) und das Ergebnis im Falle op = "=" an eingabe.setText(result) in das Eingabefeld geschrieben.
Würde das gehen?
 

innoc

Aktives Mitglied
Ich habe versucht, über einen StringTokenizer die Ausgabe in die Zahlen und den Operator zu zerlegen. Das Programm lässt sich auch ohne Murren kompilieren. Die Ausführung ist ok, bis zu dem Punkt, an dem ich "=" drücke. Dann bekomme ich eine NumberFormatException. In der Fehlerausgabe steht noch Integer.parseInt(Unknown Source), also nimmt er args[0] und args[1] nicht an. Ich verstehe nur nicht, warum das so ist. Ich habe sie doch richtig initialisiert, oder?

Hier nun das komplette Programm:

import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class Rechner extends Frame {
private String text = new String();

private BorderLayout borderLayout1 = new BorderLayout();


public Rechner() {
this.setLayout(borderLayout1);
this.setSize (150,200);
this.setLocation (100,100);
this.setBackground (Color.gray);
add(new RechnerRahmen());
}

TextField eingabe;

class ZiffernButton extends Button {
private int nr;
public ZiffernButton (int nr) {
super(""+nr);
this.nr = nr;
this.addActionListener(new ZiffernListener());
}
class ZiffernListener implements ActionListener {
//private String text = new String();
public ZiffernListener() {
super();
}
public void actionPerformed (ActionEvent e) {
System.out.println ("ZiffernButton "+nr+" aufgerufen");
text = eingabe.getText();
//*** evtl. Test auf fehlerhafte Zeichenkette
text = text + nr;
eingabe.setText(text);
}
}
}

class OperationsButton extends Button {
private String typ;
private RechnerRahmen rahmen;
public OperationsButton(String typ, RechnerRahmen rahmen) {
super(typ);
this.typ = typ;
this.rahmen = rahmen;
this.addActionListener(new OperationsListener());
}
class OperationsListener implements ActionListener {
public OperationsListener() {
super();
}
public void actionPerformed(ActionEvent e) {
System.out.println ("ZiffernButton "+typ+" aufgerufen");
text = eingabe.getText();
//*** evtl. Test auf fehlerhafte Zeichenkette
text = text + typ;
eingabe.setText(text);
if (typ.equals("=")) {
String expression = eingabe.getText();
Rechnung p = new Rechnung();
int result = p.evaluate(expression);
System.out.println("value of "+expression);
}
}
}
}

class RechnerRahmen extends Panel {
public RechnerRahmen() {
super();
eingabe = new TextField("",20);
eingabe.setEditable(false);
eingabe.setText(String.valueOf(0));
eingabe.setBackground(Color.white);
ZiffernButton ziffern[] = new ZiffernButton[10];
for (int i=0;i<10;i++) ziffern = new ZiffernButton(i);
OperationsButton op[] = new OperationsButton[4];
op[0] = new OperationsButton("+",this);
op[1] = new OperationsButton("-",this);
op[2] = new OperationsButton("*",this);
op[3] = new OperationsButton("=",this);
Panel ziffernRahmen = new Panel(new GridLayout(2,5));
for(int i=0;i<10;i++) ziffernRahmen.add(ziffern);
Panel opRahmen = new Panel(new GridLayout(1,4));
for(int i=0;i<4;i++) opRahmen.add(op);
this.add("North",eingabe);
this.add("Center",ziffernRahmen);
this.add("South",opRahmen);
}
}

public class Rechnung {
private static final String DELIMS = "+-*";
private int operate(int lhs, String op, int rhs) {
if (op.equals("+")) {
return lhs + rhs;
}
if (op.equals("-")) {
return lhs - rhs;
}
if (op.equals("*")) {
return lhs * rhs;
}
throw new IllegalArgumentException("unrecognized operator "+op);
}
public int evaluate(String s) {
String[] args = new String[2];
int result = 0;
StringTokenizer tokens = new StringTokenizer(s, DELIMS, true);
while (tokens.hasMoreTokens()) {
String token = tokens.nextToken();
if (DELIMS.indexOf(token) >=0) {
int right = Integer.parseInt(args[0]);
int left = Integer.parseInt(args[1]);
result = operate(left, token, right);
}
}
return result;
}
}


public static void main (String argv[]) {
Rechner rechner = new Rechner();
rechner.addWindowListener(new WindowAdapter() {
public void windowClosing (WindowEvent e) {
System.exit (0);
}
});
rechner.setVisible (true);
}
}
 

Marco13

Top Contributor
Hab's jetzt noch nicht getestet, aber under der Zeile
Integer.parseInt(Unknown Source)
müßte in der Fehleraugabe eine Zeile stehen, die sich auf deinen Quellcode bezieht. In dieser Zeile wird irgendwo
Integer.parseInt(einStrnig);
aufgerufen. VOR dieser Zeile kannst du mal
System.out.println("Parse jetzt '"+einString+"'");
einfügen, und schauen, was er sagt. Wenns nicht hilft, sag' nochmal bescheid.
 

innoc

Aktives Mitglied
Sorry, das Programm noch einmal mit Java Tags.
Bez. der Fehlermeldung: Das kann ich erst nach der Arbeit überprüfen.

Java:
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class Rechner extends Frame {
  private String text = new String();

  private BorderLayout borderLayout1 = new BorderLayout();


  public Rechner() {
    this.setLayout(borderLayout1);
    this.setSize (150,200);
    this.setLocation (100,100);
    this.setBackground (Color.gray);
    add(new RechnerRahmen());
  }

  TextField eingabe;

  class ZiffernButton extends Button {
    private int nr;
    public ZiffernButton (int nr) {
      super(""+nr);
      this.nr = nr;
      this.addActionListener(new ZiffernListener());
    }
    class ZiffernListener implements ActionListener {
      //private String text = new String();
      public ZiffernListener() {
        super();
      }
      public void actionPerformed (ActionEvent e) {
        System.out.println ("ZiffernButton "+nr+" aufgerufen");
        text = eingabe.getText();
        //*** evtl. Test auf fehlerhafte Zeichenkette
        text = text + nr;
        eingabe.setText(text);
      }
    }
  }

  class OperationsButton extends Button {
    private String typ;
    private RechnerRahmen rahmen;
    public OperationsButton(String typ, RechnerRahmen rahmen) {
      super(typ);
      this.typ = typ;
      this.rahmen = rahmen;
      this.addActionListener(new OperationsListener());
    }
    class OperationsListener implements ActionListener {
      public OperationsListener() {
        super();
      }
      public void actionPerformed(ActionEvent e) {
        System.out.println ("ZiffernButton "+typ+" aufgerufen");
        text = eingabe.getText();
        //*** evtl. Test auf fehlerhafte Zeichenkette
        text = text + typ;
        eingabe.setText(text);
        if (typ.equals("=")) {
          String expression = eingabe.getText();
          Rechnung p = new Rechnung();
          int result = p.evaluate(expression);
          System.out.println("value of "+expression);
        }
      }
    }
  }

  class RechnerRahmen extends Panel {
    public RechnerRahmen() {
      super();
      eingabe = new TextField("",20);
      eingabe.setEditable(false);
      eingabe.setText(String.valueOf(0));
      eingabe.setBackground(Color.white);
      ZiffernButton ziffern[] = new ZiffernButton[10];
      for (int i=0;i<10;i++) ziffern[i] = new ZiffernButton(i);
      OperationsButton op[] = new OperationsButton[4];
      op[0] = new OperationsButton("+",this);
      op[1] = new OperationsButton("-",this);
      op[2] = new OperationsButton("*",this);
      op[3] = new OperationsButton("=",this);
      Panel ziffernRahmen = new Panel(new GridLayout(2,5));
      for(int i=0;i<10;i++) ziffernRahmen.add(ziffern[i]);
      Panel opRahmen = new Panel(new GridLayout(1,4));
      for(int i=0;i<4;i++) opRahmen.add(op[i]);
      this.add("North",eingabe);
      this.add("Center",ziffernRahmen);
      this.add("South",opRahmen);
    }
  }

  public class Rechnung {
    private static final String DELIMS = "+-*";
    private int operate(int lhs, String op, int rhs) {
      if (op.equals("+")) {
         return lhs + rhs;
      }
      if (op.equals("-")) {
        return lhs - rhs;
      }
      if (op.equals("*")) {
         return lhs * rhs;
      }
      throw new IllegalArgumentException("unrecognized operator "+op);
    }
    public int evaluate(String s) {
      String[] args = new String[2];
      int result = 0;
      StringTokenizer tokens = new StringTokenizer(s, DELIMS, true);
      while (tokens.hasMoreTokens()) {
         String token = tokens.nextToken();
         if (DELIMS.indexOf(token) >=0) {
           int right = Integer.parseInt(args[0]);
           int left = Integer.parseInt(args[1]);
           result = operate(left, token, right);
         }
       }
       return result;
     }
   } 


   public static void main (String argv[]) {
     Rechner rechner = new Rechner();
     rechner.addWindowListener(new WindowAdapter() {
        public void windowClosing (WindowEvent e) {
          System.exit (0);
        }
     });
     rechner.setVisible (true);
   }
}
 

Schandro

Top Contributor
in der Methode evaluate erstellst du das String-Array "args" und weist dessen Elementen keine Werte zu, sie bleiben also null. Deswegen wird ein paar Zeilen später Integer.parseInt(null) aufgerufen. => NumberFormatException
 

innoc

Aktives Mitglied
Ich bin ein Stück weitergekommen, aber immer noch fehlt noch etwas.
Ich habe versucht einen Stack zu implementieren. Eine Zahl der Rechenoperation zahl1 operator zahl2 bekomme ich angezeigt, die zweite jedoch nicht. Ich bekomme stattdessen eine EmptyStackException-Fehlermeldung. Es ist mir eigentlich schon klar warum. Im Internet benutzen Leute einen LinkedStack. Den würde ich jetzt hier ungern einsetzen. Gibt es nicht einen anderen Weg einen String an definierter Stelle in zwei Integerzahlen zu trennen und diese auf dem Stack zur weiteren Verwendung abzulegen. Ich habe natürlich auch nichts dagegen, wenn mir jemand eine andere Methode aufzeigt, evtl. Array, LinkedList, ...
Anbei noch der aktuelle Programmcode:
Java:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.lang.*;

public class Rechner extends Frame {

  private String text = new String();
  private Stack<Integer> stack = new Stack<Integer>();
  


  private BorderLayout borderLayout1 = new BorderLayout();


  public Rechner() {
    this.setLayout(borderLayout1);
    this.setSize (150,200);
    this.setLocation (100,100);
    this.setBackground (Color.gray);
    add(new RechnerRahmen());
  }

  TextField eingabe;

 
  class ZiffernButton extends Button {
    private int nr;
    public ZiffernButton (int nr) {
      super(""+nr);
      this.nr = nr;
      this.addActionListener(new ZiffernListener());
    }
    class ZiffernListener implements ActionListener {
      //private String text = new String();
      public ZiffernListener() {
        super();
      }
      public void actionPerformed (ActionEvent e) {
        System.out.println ("ZiffernButton "+nr+" aufgerufen");
        text = eingabe.getText();
        //*** evtl. Test auf fehlerhafte Zeichenkette
        text = text + nr;
        eingabe.setText(text);
      }
    }
  }

  class OperationsButton extends Button {
    private String typ;
    private RechnerRahmen rahmen;
    public OperationsButton(String typ, RechnerRahmen rahmen) {
      super(typ);
      this.typ = typ;
      this.rahmen = rahmen;
      this.addActionListener(new OperationsListener());
    }
    class OperationsListener implements ActionListener { 
      int num1, num2;
      public OperationsListener() {
        super();
      }
	public boolean isOperator (String token){
        return (token.equals("+") || token.equals("-") || token.equals("*"));
      }
      public void actionPerformed(ActionEvent e) {
	  String DELIMS = "+-*";
        System.out.println ("ZiffernButton "+typ+" aufgerufen");
        text = eingabe.getText();
        String expression = eingabe.getText();
        StringTokenizer tokens = new StringTokenizer(expression, DELIMS, true);
        //*** evtl. Test auf fehlerhafte Zeichenkette
        text = text + typ;
        eingabe.setText(text);
        if (typ.equals("=")) {
          expression = expression.substring(0,expression.length());
          while (tokens.hasMoreTokens()) {
            String token = tokens.nextToken();
            if (isOperator(token)){
              System.out.println(expression);
              num2 = ((Integer)stack.pop()).intValue();
              System.out.println("Num2 "+num2);
		  num1 = ((Integer)stack.pop()).intValue();
	        System.out.println("Num1 "+num1);
	      }
            else {
		  stack.push(new Integer(Integer.parseInt(token)));
		  System.out.println(token);
            }			
          }
        }
      }
    }
  }

  class RechnerRahmen extends Panel {
    public RechnerRahmen() {
      super();
      eingabe = new TextField("",20);
      eingabe.setEditable(false);
      eingabe.setText(String.valueOf(0));
      eingabe.setBackground(Color.white);
      ZiffernButton ziffern[] = new ZiffernButton[10];
      for (int i=0;i<10;i++) ziffern[i] = new ZiffernButton(i);
      OperationsButton op[] = new OperationsButton[4];
      op[0] = new OperationsButton("+",this);
      op[1] = new OperationsButton("-",this);
      op[2] = new OperationsButton("*",this);
      op[3] = new OperationsButton("=",this);
      Panel ziffernRahmen = new Panel(new GridLayout(2,5));
      for(int i=0;i<10;i++) ziffernRahmen.add(ziffern[i]);
      Panel opRahmen = new Panel(new GridLayout(1,4));
      for(int i=0;i<4;i++) opRahmen.add(op[i]);
      this.add("North",eingabe);
      this.add("Center",ziffernRahmen);
      this.add("South",opRahmen);
    }
  }


   public static void main (String argv[]) {
     Rechner rechner = new Rechner();
     rechner.addWindowListener(new WindowAdapter() {
        public void windowClosing (WindowEvent e) {
          System.exit (0);
        }
     });
     rechner.setVisible (true);
   }
}
 

André Uhres

Top Contributor
Ich bekomme stattdessen eine EmptyStackException-Fehlermeldung.
Versuch's mal so:
Java:
...
public class Rechner extends Frame {
...
    private Parser parser = new Parser();//siehe FAQ!
...
    class OperationsButton extends Button {
...
            public void actionPerformed(ActionEvent e) {
                String DELIMS = "+-*";
                text = eingabe.getText();
                String expression = eingabe.getText();
                StringTokenizer tokens = new StringTokenizer(expression, DELIMS, true);
                //*** evtl. Test auf fehlerhafte Zeichenkette
                if (typ.equals("=")) {
                    double result = parser.parse(text);
                    text = text + typ;
                    text = text + result;
                } else {
                    text = text + typ;
                }
                eingabe.setText(text);
            }
...
Den Parser finden wir in den FAQ.
 

innoc

Aktives Mitglied
Ich habe nach der Klasse Parser gesucht. Handelt es sich hierbei um den Parser aus java.lang.Object? Welches FAQ meinst Du denn? Naiverweise habe ich den Code von Dir einfach in mein Programm kopiert. Da hat mir der Kompiler mitgeteilt, dass er die Klasse Parser nicht kennt. Muss ich mir eine eigene Parser-Klasse schreiben?
Wenn dem so ist, benötige ich für den Parser nicht auch Trennzeichen zwischen meinen Zahlen und Operatoren, z.B Leerzeichen oder Klammern? Wie bekomme ich die denn in das Textfield rein, etwa nach dem Muster, if Operator then add leerzeichen vor und hinter Operator.
 

innoc

Aktives Mitglied
Danke für den Link bez. Parser.
Unabhängig davon habe ich es jetzt geschafft, aus dem Textfeld die zwei Zahlen zu selektieren und die mathematischen Operationen zu implementieren (siehe den Programmcode unten). Zwei Schönheitsfehler hat jedoch meine Lösung:
1. Vom Resultat im Textfeld wird die erste Ziffer nicht angezeigt.
2. Bei der Ausgabe auf der Konsole wird bei Eingabe von 12 + 56 immer folgendes ausgegeben: Num2 12
Operator +
Num1 12
Num2 56
Resultat 68
Ich habe einiges versucht, um zu verhindern, dass am Anfang Num2 12 ausgegeben wird, aber nichts davon war erfolgreich. Es ist zwar für das Ergebnis nicht relevant, aber trotzdem würde mich die Lösung interessieren.

Hier der Programmcode:
Java:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.lang.*;

public class Rechner extends Frame {

  private String text = new String();
  private Stack stack = new Stack();
  


  private BorderLayout borderLayout1 = new BorderLayout();


  public Rechner() {
    this.setLayout(borderLayout1);
    this.setSize (150,200);
    this.setLocation (100,100);
    this.setBackground (Color.gray);
    add(new RechnerRahmen());
  }

  TextField eingabe;

 
  class ZiffernButton extends Button {
    private int nr;
    public ZiffernButton (int nr) {
      super(""+nr);
      this.nr = nr;
      this.addActionListener(new ZiffernListener());
    }
    class ZiffernListener implements ActionListener {
      //private String text = new String();
      public ZiffernListener() {
        super();
      }
      public void actionPerformed (ActionEvent e) {
        System.out.println ("ZiffernButton "+nr+" aufgerufen");
        text = eingabe.getText();
        //*** evtl. Test auf fehlerhafte Zeichenkette
        text = text + nr;
        eingabe.setText(text);
      }
    }
  }

  class OperationsButton extends Button {
    private String typ;
    private RechnerRahmen rahmen;
    public OperationsButton(String typ, RechnerRahmen rahmen) {
      super(typ);
      this.typ = typ;
      this.rahmen = rahmen;
      this.addActionListener(new OperationsListener());
    }
    class OperationsListener implements ActionListener { 
      int num1, num2, resultat;
      String op;
      public OperationsListener() {
        super();
      }
	public boolean isOperator (String token){
        return (token.equals("+") || token.equals("-") || token.equals("*"));
      }
      public void actionPerformed(ActionEvent e) {
	  String DELIMS = "+-*";
        System.out.println ("ZiffernButton "+typ+" aufgerufen");
        text = eingabe.getText();
        String expression = eingabe.getText();
        StringTokenizer tokens = new StringTokenizer(expression, DELIMS, true);
        //*** evtl. Test auf fehlerhafte Zeichenkette
        text = text + typ;
        eingabe.setText(text);
        if (typ.equals("=")) {
          expression = expression.substring(0,expression.length());
          while (tokens.hasMoreTokens()) {
            String token = tokens.nextToken();
            if (! isOperator(token)){
		  stack.push(new Integer(Integer.parseInt(token)));
		  num2 = Integer.parseInt(token);		  
              System.out.println("Num2 "+num2);
	      }
            else {

              op = token;
		  System.out.println("Operator "+op);
              num1 = ((Integer)stack.pop()).intValue();
              System.out.println("Num1 "+num1);
            }
          }
	    if (op.equals("+")) {
		resultat = num1 + num2;
	    }
	    if (op.equals("-")) {
		resultat = num1 - num2;
	    }
	    if (op.equals("*")) {
		resultat = num1 * num2;
	    }
	    System.out.println ("Resultat "+resultat);
	    eingabe.setText(Integer.toString(resultat));
        }
      }
    }
  }

  class RechnerRahmen extends Panel {
    public RechnerRahmen() {
      super();
      eingabe = new TextField("",20);
      eingabe.setEditable(false);
      eingabe.setText(String.valueOf(0));
      eingabe.setBackground(Color.white);
      ZiffernButton ziffern[] = new ZiffernButton[10];
      for (int i=0;i<10;i++) ziffern[i] = new ZiffernButton(i);
      OperationsButton op[] = new OperationsButton[4];
      op[0] = new OperationsButton("+",this);
      op[1] = new OperationsButton("-",this);
      op[2] = new OperationsButton("*",this);
      op[3] = new OperationsButton("=",this);
      Panel ziffernRahmen = new Panel(new GridLayout(2,5));
      for(int i=0;i<10;i++) ziffernRahmen.add(ziffern[i]);
      Panel opRahmen = new Panel(new GridLayout(1,4));
      for(int i=0;i<4;i++) opRahmen.add(op[i]);
      this.add("North",eingabe);
      this.add("Center",ziffernRahmen);
      this.add("South",opRahmen);
    }
  }


   public static void main (String argv[]) {
     Rechner rechner = new Rechner();
     rechner.addWindowListener(new WindowAdapter() {
        public void windowClosing (WindowEvent e) {
          System.exit (0);
        }
     });
     rechner.setVisible (true);
   }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D JComboboxen in Abhängigkeiten füllen Java Basics - Anfänger-Themen 7
M Frage bzgl. Testbarkeit von Methoden in Relation zu Ihren Abhängigkeiten Java Basics - Anfänger-Themen 11
H Abhängigkeiten (key-value ) Java Basics - Anfänger-Themen 19
M Abhängigkeiten Java Basics - Anfänger-Themen 13
C Abhängigkeiten zwischen Projekten entfernen Java Basics - Anfänger-Themen 6
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
C Kollision zweier Rechtecke, Schnittpunkte bestimmen Java Basics - Anfänger-Themen 25
C alle möglichen Kombinationen zweier Ziffern auf drei / vier / und 'n" Stellen Java Basics - Anfänger-Themen 11
D Interaktion zweier Objekte Java Basics - Anfänger-Themen 5
J Transformation zweier Integer in ein Double Java Basics - Anfänger-Themen 26
H Gemeinsame Schnittmenge zweier Arrays ausgeben Java Basics - Anfänger-Themen 12
F Erstellen zweier Objekte mit dem selben Inhalt Java Basics - Anfänger-Themen 1
K Datentypen Einträge zweier Matrizen vergleichen Java Basics - Anfänger-Themen 4
K Erste Schritte Berechnung der Summe zweier Arrays Java Basics - Anfänger-Themen 15
S Vergleich zweier ArrayLists mit Ausgabe an dritte ArrayList Java Basics - Anfänger-Themen 5
I Schnittpunkt zweier Geraden berechnen Java Basics - Anfänger-Themen 25
G Klassen Vergleich zweier Klassen Java Basics - Anfänger-Themen 23
S Implementieren zweier Klassen Java Basics - Anfänger-Themen 5
P Ungerade Zahlen ausgeben lassen zwischen Spannweite zweier eingegeben zahlen Java Basics - Anfänger-Themen 6
L Vergleich zweier Variablen, mit Abweichung Java Basics - Anfänger-Themen 3
N Methoden Methode zum Vergleich zweier Geburtstage Java Basics - Anfänger-Themen 5
K Multiplikation zweier Matrizen Java Basics - Anfänger-Themen 23
D Zusammenfassen zweier Programme Java Basics - Anfänger-Themen 3
B Kreuzprodukt zweier Vektoren (Erste Java Aufgabe - Hilfestellungen und Tips erwünscht) Java Basics - Anfänger-Themen 4
M Vergleich zweier Array Stellen mit equals/NullpointerException Java Basics - Anfänger-Themen 9
L BufferdImage schwarzes Bild nach zusammenfügen zweier Bilder Java Basics - Anfänger-Themen 8
N Vergleich zweier String Arrays scheitert Java Basics - Anfänger-Themen 3
C Proportionale Abnahme zweier Werte Java Basics - Anfänger-Themen 4
O ArrayListe sortieren anhand zweier Parameter Java Basics - Anfänger-Themen 4
C Inhalte zweier Vektoren vergleichen Java Basics - Anfänger-Themen 3
T Programm, das die Differenz zweier Daten ausgibt Java Basics - Anfänger-Themen 4
S Ermittlung des GGTs zweier Werte Java Basics - Anfänger-Themen 5
Y Erste Schritte Verknüpfung zweier JAVA-Codes Java Basics - Anfänger-Themen 8
A Methoden Gedanken Anstöße zur Realisierung zweier Ideen (Grafisch Sekunden zählen und Frameaufteilung) Java Basics - Anfänger-Themen 18
I Einlese Abfrage zweier Variablen in einem Fenster Java Basics - Anfänger-Themen 6
A Durchschnitt zweier Mengen berechnen Java Basics - Anfänger-Themen 3
G Kombination zweier Befehle (Preis festlegen & Rabatt berechnen) Java Basics - Anfänger-Themen 3
W Methoden größe zweier tiere vergleichen Java Basics - Anfänger-Themen 15
K Schnitt zweier Ebenen ergibt Gerade Java Basics - Anfänger-Themen 10
L vergleich zweier texte Java Basics - Anfänger-Themen 18
B Vergleich zweier Objekte durch "Hashfunktion" Java Basics - Anfänger-Themen 12
J Addition zweier Zahlen Java Basics - Anfänger-Themen 9
J Dimensionen zweier Arrays vergleichen Java Basics - Anfänger-Themen 4
U Größenvergleich / Dimensionsvergleich zweier Matrizen Java Basics - Anfänger-Themen 2
N Datenaustausch zweier rechner Java Basics - Anfänger-Themen 4
turmaline Gleicheit zweier Listen Java Basics - Anfänger-Themen 12
S Print Methode zweier "Classes" kombinieren Java Basics - Anfänger-Themen 2
C Dateiinhalt zweier Dateien auf Gleichheit prüfen Java Basics - Anfänger-Themen 3
S Addition zweier 32 Byte langer ByteArrays Java Basics - Anfänger-Themen 5
W Unterschiede zweier Dateien herauslesen Java Basics - Anfänger-Themen 7
P Unterschiede zweier System.in Varianten Java Basics - Anfänger-Themen 3
G Vergleich zweier Arrays Java Basics - Anfänger-Themen 8
D Eine Nachkommazahl zweier Double vergleichen Java Basics - Anfänger-Themen 4
N sortieren zweier abhängiger array listen Java Basics - Anfänger-Themen 12
S Addieren zweier Arrays Java Basics - Anfänger-Themen 10
T ermittlung des minimus zweier eingegebener werte Java Basics - Anfänger-Themen 7
G größere zweier zahlen ermitteln und ausgeben Java Basics - Anfänger-Themen 6
G Summe zweier doubles falsch? Java Basics - Anfänger-Themen 10
I Kollision zweier Rechtecke Java Basics - Anfänger-Themen 9
H Genauigkeit beim Multiplizieren zweier Zahlen Java Basics - Anfänger-Themen 2
K Vergleich zweier Objekte in einer HashMap Java Basics - Anfänger-Themen 6
B Zusammenspiel zweier JFrames Java Basics - Anfänger-Themen 2
A Schnitt zweier Rechtecke ermitteln Java Basics - Anfänger-Themen 2
N Vergleich zweier Elemente verschiedener Vectoren Java Basics - Anfänger-Themen 2
G Vergleich zweier 'long'-Werte. Problem! Java Basics - Anfänger-Themen 6
T Inhalte zweier Variablen tauschen Java Basics - Anfänger-Themen 18
U Maximum zweier Zahlen ermitteln Java Basics - Anfänger-Themen 7
N Den Inhalt zweier Strings (Zahlen) addieren Java Basics - Anfänger-Themen 5
S maximum zweier Zahlen Java Basics - Anfänger-Themen 1
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
Detlef Bosau Nachladen von Klassen zur Laufzeit Java Basics - Anfänger-Themen 24
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
C Array von Klassen Java Basics - Anfänger-Themen 2
monsterherz 2 Klassen daher Probs mit dem Dateinamen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
I @Entity Klassen, Service Beans etc. aus einem Share Projekt beziehen? Java Basics - Anfänger-Themen 26
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
I Gleiche Klassen und Methoden in unterschiedlichen Projekten nutzen Java Basics - Anfänger-Themen 2
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
N Klassen Methoden anderer Klassen aufrufen Java Basics - Anfänger-Themen 4
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Andere Methoden in anderen Klassen aufrufen Java Basics - Anfänger-Themen 11
L Methoden in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
L Best Practice Annotierte Klassen im Classpath herausfinden Java Basics - Anfänger-Themen 1
P Mit dem Scanner Klassen aufrufen Java Basics - Anfänger-Themen 3
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
K Zweite Ausgabe von vererbten Klassen Java Basics - Anfänger-Themen 3
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
Speedrunner klassen aufrufen Java Basics - Anfänger-Themen 41
M Log4J (v2) nachträglich in allen Klassen hinzufügen Java Basics - Anfänger-Themen 9
D importieren eigener Klassen Java Basics - Anfänger-Themen 12
W Wo ist der Wurm in meinem Grundverständnis von Klassen? Java Basics - Anfänger-Themen 22

Ähnliche Java Themen

Neue Themen


Oben