Informatik Programmieren was mache ich falsch? Java?
Java Editor….pls hilft mir
Neu Button programmieren FUNKTIONIERT NICHT
Rechen Button FUNKTIONIERT AUCH NICHT
Das hier ist meine Maske:
public void bNeu_ActionPerformed(ActionEvent evt) {
String s;
fGrundgebühr=150;
s=Float.toString(fGrundgebuehr);
tfGrundgebuehr.setText(s);
tfArbeitspreis.setText("");
tfAusgabe.setText("");
} // end of bNeu_ActionPerformed
public void bRechnen_ActionPerformed(ActionEvent evt) {
// Deklaration der Variablen
String s;
float fArbeitspreis,fBetrag;
// Einlesen von Grundgebühr und Arbeitspreis
s = tfGrundgebuehr.getText();
fGrundgebuehr = Float.parseFloat(s);
s = tfArbeitspreis.getText();
fArbeitspreis = Float.parseFloat(s);
if (fArbeitspreis<92.000) {
fBetrag=(150+fArbeitspreis*0,04)*1,07;
} // end of if
else {
if (fArtbeitspreis<150.000) {
fBetrag=(150+fArbeitspreis*0,03)*1,07;
} // end of if
else {
fBetrag=(150+fArbeitspreis*0,02)*1,07;
} // end of if-else
} // end of if-else
} // end of bRechnen_ActionPerformed
public void bEnde_ActionPerformed(ActionEvent evt) {
System.exit(0);
} // end of bEnde_ActionPerformed
Maske:
neue Maske???
2 Antworten
Was auf den ersten Blick auffällt ist das vertauschte . und ,
Mit dem Komma trennst du Parameter und mit dem Punkt machst du Dezimalstellen.
Dementsprechend sind es 92000 usw. und 0.03 usw.
Okay, danke schonmal, kannst du mir dann noch bei meinen Fehlern weiter helfen?:)
Im Java-Quelltext werden Dezimalzahlen mit Dezimalpunkt und ohne Tausendertrenner eingegeben:
fArbeitspreis<92000) {
fBetrag=(150+fArbeitspreis*0.04)*1.07;
}
das was in meiner Frage steht….der Neu und Rechnen Button funktioniert nicht
Ich sehe nicht, was in bNeu_ActionPerformed() falsch ist. vielleicht fehlt nur ein redraw() oder update(). Das hängt davon ab, welches GUI-Framework Du benutzt.
In bRechnen_ActionPerformed() berechnest Du den Endpreis, zeigst ihn aber nicht an. Da fehlt wohl noch ein
tfAusgabe.setText( "%.2f".formatted(fBetrag) );
und danach wohl wieder ein update() oder so.
Float.toString() sucht sich selbst aus, wie viele Dezimale angezeigt werden. Bei Geldbeträgen empfehlen sich aber immer 2 Stellen hinterm Komma. Das erreichst Du zum Beispiel mit "%.2f".formattet(floatWert).
Echt? Der Neu Button ist nicht falsch? Also bei mir reagiert er nicht:( liegt das vllt an meiner Maske? Ist die falsch?
Weiß ich nicht, weil ich Deine Maske nicht kenne. Schreibe mal
System.out.println("Neu Button");
in die Methode. Wenn der Text beim Drücken auf der Konsole erscheint, wird die Methode zumindest ausgeführt.
die Maske ist oben in der Frage hinzugefügt
Na, so sieht sie am Bildschirm aus. Wie wurde sie definiert? sind die Buttons mit Deinen Methoden verbunden? Funktioniert wenigstens der Ende-Button?
Test: Wenn es nur ein redraw()-Problem ist, sollten die neuen Werte erscheinen, wenn Du die Fenstergröße mit der Maus änderst.
Woher kommt eigentlich der Text „150 EURO“? In Deinem Code setzt Du einen anderen Text.
Falls Du AWT benutzt, heißt diese Methode repaint(). Du kannst ja mal für jedes geänderte Feld, z.B. nach tfAusgabe.setText() mal tfAusgabe.repaint() aufrufen.
Irgendwo, vermutlich in main() muss der Dialog ja mal erzeugt und mit Textfeldern und Buttons befüllt werden. Zeig mal den ganzen Code.
import java.awt.*;
import java.awt.event.*;
public class UebungsKAInfo extends Frame {
// Anfang Attribute
private Label lJaehrlicheGasberechnung1 = new Label();
private Label lGrundgebuehr1 = new Label();
private TextField tfGrundgebuehr = new TextField();
private Label lArbeitspreis1 = new Label();
private TextField tfArbeitspreis = new TextField();
private Label lGebenSieihrenArbeitspreisan1 = new Label();
private Label l7Mehrwertsteuer1 = new Label();
private Button bNeu = new Button();
private Button bRechnen = new Button();
private Button bEnde = new Button();
private Label lBetrag1 = new Label();
private TextField tfBetrag = new TextField();
private TextField textField1 = new TextField();
// Ende Attribute
public UebungsKAInfo() {
// Frame-Initialisierung
super();
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) { dispose(); }
});
int frameWidth = 457;
int frameHeight = 334;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
setTitle("ÜbungsKAInfo");
setResizable(false);
Panel cp = new Panel(null);
add(cp);
// Anfang Komponenten
lJaehrlicheGasberechnung1.setBounds(136, 0, 160, 24);
lJaehrlicheGasberechnung1.setText("Jährliche Gasberechnung");
cp.add(lJaehrlicheGasberechnung1);
lGrundgebuehr1.setBounds(56, 32, 80, 24);
lGrundgebuehr1.setText("Grundgebühr");
cp.add(lGrundgebuehr1);
tfGrundgebuehr.setBounds(152, 32, 80, 24);
tfGrundgebuehr.setText("");
tfGrundgebuehr.setEditable(true);
cp.add(tfGrundgebuehr);
lArbeitspreis1.setBounds(56, 112, 80, 24);
lArbeitspreis1.setText("Arbeitspreis");
cp.add(lArbeitspreis1);
tfArbeitspreis.setBounds(152, 112, 88, 24);
cp.add(tfArbeitspreis);
lGebenSieihrenArbeitspreisan1.setBounds(48, 72, 200, 24);
lGebenSieihrenArbeitspreisan1.setText("Geben Sie ihren Arbeitspreis an.");
cp.add(lGebenSieihrenArbeitspreisan1);
l7Mehrwertsteuer1.setBounds(88, 152, 120, 24);
l7Mehrwertsteuer1.setText("7 % Mehrwertsteuer");
cp.add(l7Mehrwertsteuer1);
bNeu.setBounds(48, 216, 80, 24);
bNeu.setLabel("Neu");
bNeu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
bNeu_ActionPerformed(evt);
}
});
cp.add(bNeu);
bRechnen.setBounds(152, 216, 80, 24);
bRechnen.setLabel("Rechnen");
bRechnen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
bRechnen_ActionPerformed(evt);
}
});
cp.add(bRechnen);
bEnde.setBounds(256, 216, 80, 24);
bEnde.setLabel("Ende");
bEnde.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
bEnde_ActionPerformed(evt);
}
});
cp.add(bEnde);
addWindowListener(new WindowAdapter() {
public void windowOpened(WindowEvent evt) {
WindowOpened(evt);
}
});
lBetrag1.setBounds(56, 184, 104, 24);
lBetrag1.setText("Betrag");
cp.add(lBetrag1);
tfBetrag.setBounds(176, 184, 120, 24);
cp.add(tfBetrag);
textField1.setBounds(160, 192, 41, 1);
cp.add(textField1);
// Ende Komponenten
setVisible(true);
} // end of public UebungsKAInfo
// Anfang Methoden
public static void main(String[] args) {
new UebungsKAInfo();
} // end of main
public void bNeu_ActionPerformed(ActionEvent evt) {
float fGrundgebuehr;
String s;
// Setzen der Grundgebühr auf 150
fGrundgebuehr = 150;
s = Float.toString(fGrundgebuehr);
tfGrundgebuehr.setText(s);
// Löschen der Eingaben im Arbeitspreis- und Ausgabefeld
tfArbeitspreis.setText("");
tfAusgabe.setText("");
}
public void bRechnen_ActionPerformed(ActionEvent evt) {
float fGrundgebuehr, fArbeitspreis, fBetrag;
String s;
// Einlesen der Grundgebühr/ Arbeitspreises
s = tfGrundgebuehr.getText();
fGrundgebuehr = Float.parseFloat(s);
s = tfArbeitspreis.getText();
fArbeitspreis = Float.parseFloat(s);
// Berechnung des Betrags
if (fArbeitspreis<92000) {
fBetrag = (150 + fArbeitspreis*0.04)*1.07;
} // end of if
else {
if (fArbeitspreis<150000) {
fBetrag = (150 + fArbeitspreis * 0.03) * 1.07;
} // end of if
else {
fBetrag = (150 + fArbeitspreis * 0.02) * 1.07;
} // end of if-else
} // end of if-else
s = Float.toString(fBetrag);
tfAusgabe.setText(s);
}
} // end of bNeu_ActionPerformed
public void bRechnen_ActionPerformed(ActionEvent evt) {
} // end of bEnde_ActionPerformed
// Ende Methoden
} // end of class ÜbungsKAInfo
Das sieht doch schon nach was aus. Allerdings musste ich da erst mal ein paar Fehler ausmerzen:
- Z155: bRechnen_ActionPerformed() ist doppelt, und bEnde_ActionPerformed() fehlt plötzlich. In Deiner Frage war es noch richtig.
- Z88: WindowOpened() gibt es nicht. Ich habs einfach auskommentiert. Vermutlich wolltest Du mit dieser Funktion den dialog initialisieren, also dasselbe wie in bNeu_ActionPerformed() machen. Dann ruf doch einfach diese (statt WindowOpened) auf.
- Z122, 150: tfAusgabe gibt es auch nicht. Das Feld heißt bei Dir tfBetrag.
- Z138: Du rechnest mit float (wie vor 50 Jahren!). Dann musst Du auch alle Konstanten als float angeben: *0.04f)*1.07f usw. Nimm lieber überall double, Double.parseDouble(). Dann funktioniert es auch mit Zahlen ohne f hinten.
Die Zeilennummern können ±1 abweichen, weil ich vielleicht ne Leerzeile eingefügt oder gelöscht habe. Nach dem Fixen funktioniert bei mir alles.
Eine Kleinigkeit noch: Grundgebühr und Arbeitspreis sind vorgegeben. Der Benutzer soll seinen Verbrauch eingeben. Du musst das Label ändern und solltest die Variablen umbenennen (fArbeitspreis ⇒ fVerbrauch).
Ach ja, in Z151 war noch eine einsame geschweifte Klammer-zu zuviel drin.
Och gott….wäre es möglich dass du mich den verbesserten Quelltext mal schickst? Bei mir klappt es immernoch nicht:( hab so Angst vor der KA
import java.awt.*;
import java.awt.event.*;
public class UebungsKAInfo extends Frame {
// Anfang Attribute
private Label lJaehrlicheGasberechnung1 = new Label();
private Label lGrundgebuehr1 = new Label();
private TextField tfGrundgebuehr = new TextField();
private Label lArbeitspreis1 = new Label();
private TextField tfArbeitspreis = new TextField();
private Label lGebenSieihrenArbeitspreisan1 = new Label();
private Label l7Mehrwertsteuer1 = new Label();
private Button bNeu = new Button();
private Button bRechnen = new Button();
private Button bEnde = new Button();
private Label lBetrag1 = new Label();
private TextField tfBetrag = new TextField();
private TextField textField1 = new TextField();
// Ende Attribute
public UebungsKAInfo() {
// Frame-Initialisierung
super();
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) { dispose(); }
});
int frameWidth = 457;
int frameHeight = 334;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
setTitle("ÜbungsKAInfo");
setResizable(false);
Panel cp = new Panel(null);
add(cp);
// Anfang Komponenten
lJaehrlicheGasberechnung1.setBounds(136, 0, 160, 24);
lJaehrlicheGasberechnung1.setText("Jährliche Gasberechnung");
cp.add(lJaehrlicheGasberechnung1);
lGrundgebuehr1.setBounds(56, 32, 80, 24);
lGrundgebuehr1.setText("Grundgebühr");
cp.add(lGrundgebuehr1);
tfGrundgebuehr.setBounds(152, 32, 80, 24);
tfGrundgebuehr.setText("");
tfGrundgebuehr.setEditable(true);
cp.add(tfGrundgebuehr);
lArbeitspreis1.setBounds(56, 112, 80, 24);
lArbeitspreis1.setText("Arbeitspreis");
cp.add(lArbeitspreis1);
tfArbeitspreis.setBounds(152, 112, 88, 24);
cp.add(tfArbeitspreis);
lGebenSieihrenArbeitspreisan1.setBounds(48, 72, 200, 24);
lGebenSieihrenArbeitspreisan1.setText("Geben Sie ihren Arbeitspreis an.");
cp.add(lGebenSieihrenArbeitspreisan1);
l7Mehrwertsteuer1.setBounds(88, 152, 120, 24);
l7Mehrwertsteuer1.setText("7 % Mehrwertsteuer");
cp.add(l7Mehrwertsteuer1);
bNeu.setBounds(48, 216, 80, 24);
bNeu.setLabel("Neu");
bNeu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
bNeu_ActionPerformed(evt);
}
});
cp.add(bNeu);
bRechnen.setBounds(152, 216, 80, 24);
bRechnen.setLabel("Rechnen");
bRechnen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
bRechnen_ActionPerformed(evt);
}
});
cp.add(bRechnen);
bEnde.setBounds(256, 216, 80, 24);
bEnde.setLabel("Ende");
bEnde.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
bEnde_ActionPerformed(evt);
}
});
cp.add(bEnde);
addWindowListener(new WindowAdapter() {
public void windowOpened(WindowEvent evt) {
// WindowOpened(evt);
}
});
lBetrag1.setBounds(56, 184, 104, 24);
lBetrag1.setText("Betrag");
cp.add(lBetrag1);
tfBetrag.setBounds(176, 184, 120, 24);
cp.add(tfBetrag);
textField1.setBounds(160, 192, 41, 1);
cp.add(textField1);
// Ende Komponenten
setVisible(true);
} // end of public UebungsKAInfo
// Anfang Methoden
public static void main(String[] args) {
new UebungsKAInfo();
} // end of main
public void bNeu_ActionPerformed(ActionEvent evt) {
float fGrundgebuehr;
String s;
// Setzen der Grundgebühr auf 150
fGrundgebuehr = 150;
s = Float.toString(fGrundgebuehr);
tfGrundgebuehr.setText(s);
// Löschen der Eingaben im Arbeitspreis- und Ausgabefeld
tfArbeitspreis.setText("");
tfBetrag.setText("");
}
public void bRechnen_ActionPerformed(ActionEvent evt) {
double fGrundgebuehr, fArbeitspreis, fBetrag;
String s;
// Einlesen der Grundgebühr/ Arbeitspreises
s = tfGrundgebuehr.getText();
fGrundgebuehr = Double.parseDouble(s);
s = tfArbeitspreis.getText();
fArbeitspreis = Double.parseDouble(s);
// Berechnung des Betrags
if (fArbeitspreis<92000) {
fBetrag = (150 + fArbeitspreis*0.04)*1.07;
} // end of if
else {
if (fArbeitspreis<150000) {
fBetrag = (150 + fArbeitspreis * 0.03) * 1.07;
} // end of if
else {
fBetrag = (150 + fArbeitspreis * 0.02) * 1.07;
} // end of if-else
} // end of if-else
s = Double.toString(fBetrag);
tfBetrag.setText(s);
} // end of bNeu_ActionPerformed
public void bEnde_ActionPerformed(ActionEvent evt) {
System.exit(0);
} // end of bEnde_ActionPerformed
// Ende Methoden
} // end of class ÜbungsKAInfo
danke ich versuche es gleich mal aus.....und bei dir hat es geklappt?
Ich frage mich nahemlich gerade warum meine Maske nicht funktioniert.....irgendwie bleibt sie manchmal weiß...dazu kommt, dass ich den Betrag glaube ich vergessen habe....kann das sein?
Nach ein paar kleinen Änderungen funktioniert Dein Code bei mir. Inhaltlich solltest Du in der Maske noch folgendes ändern:
- die Grundgebühr ist vorgegeben. Streiche die erste Zeile im Dialog (lösche Zeilen 44-50, 110-118 und 129-131 im Programm. In Deinen Formeln steht eh schon fix 150 drin.
- Ersetze den Text „Arbeitspreis“ durch „Verbrauch“ (Z52 im Quelltext).
Tut mir echt leid...ich bin zu unfähig......ich habe in meiner Frage mal meine neue Maske ergänzt...stimmt das?
irgendwie bleibt sie manchmal weiß
Wie startest Du das Programm denn? Ich arbeite nur auf der Kommandozeile. dann sehe ich wenigstens alle Fehlermeldungen.
ES KLAPPT!!!DANK DIR :) Dankeschön!!!
Ich werde mich da jetzt einbischen reinfuchsen, warum es bei mir nicht geklappt hat....kurze Frage...kann das daran liegen,dass ich mit fload gearbeitet habe? du mit Double? Oder wie währe es dann gewesen, wenn ich mit fload gearbeitet hätte....bzw. warum hier eher double benutzen....?
:)
ich habe in meiner Frage mal meine neue Maske ergänzt
OMG, arbeitest Du wegen der 7 Zeilen mit einem Tool, das Dir den Code generiert?
Sei's drum, die Grundgebühr steht immer noch da.
sorry...was meinst du genau?:(
.....hab ich was falsch gemacht?
Ich hätte noch eine letzte Frage...das Programm läuft, aber....ich muss in die Zeile Grundgebühr 150 eigenständig ergänzen.....das soll ja eigentlich automatisch passieren...was kann ich tun?
Der Datentyp float stammt aus Zeiten, als Speicher noch in Kilobyte und Plattenplatz in Megabyte gemessen wurde. Er hat nur 6 Dezimalstellen Genauigkeit. Seit den 80ern verwendet man eigentlich nur noch double.
Dass es „nicht geklappt“ hat, liegt vermutlich daran, dass Du mit einer IDE arbeitest, mit der Du nicht vertraut bist. Die float-Geschichte und anderes haben Fehler beim Compilieren produziert, die Du vermutlich übersehen hast.
ich muss in die Zeile Grundgebühr 150 eigenständig ergänzen
Nein, du sollst sie löschen. Für den Dialog reicht
Jährliche Gasabrechnung
Verbrauch: [_____] kWh
Betrag: [_____] €
[Berechnen] [Ende]
Zum Thema Freundschaftsanfrage: Vor vielen Jahren half ich einer Vereinskameradin bei Ihrer anstehenden Java-Prüfung. Sie ist durchgefallen, und wir sind jetzt verheiratet. Seither bin ich da vorsichtig ;-)
achso...also kann ich mich darauf einstellen, dass ich eher double verwende?Das Ding ist ich kann nicht sagen warum wir am Ende einmal Double verwenden und sonst fload....naja
Oh viel cool, es ging mir nur darum dir danke zu sagen und dass ich vllt nochmal auf dich zurück kommen kann, wenn ich fragen habe :)
Oh danke schonmal…kannst du mir trotzdem helfen? :)