Informatik Programmieren was mache ich falsch? Java?


11.12.2022, 22:28

Das hier ist meine Maske:


11.12.2022, 22:32
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

11.12.2022, 23:02

Maske:


12.12.2022, 18:04

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.

Sonnenblume633 
Fragesteller
 11.12.2022, 22:36

Okay, danke schonmal, kannst du mir dann noch bei meinen Fehlern weiter helfen?:)

0

Im Java-Quelltext werden Dezimalzahlen mit Dezimalpunkt und ohne Tausendertrenner eingegeben:

fArbeitspreis<92000) {
      fBetrag=(150+fArbeitspreis*0.04)*1.07;
}
Sonnenblume633 
Fragesteller
 11.12.2022, 22:34

Oh danke schonmal…kannst du mir trotzdem helfen? :)

0
Sonnenblume633 
Fragesteller
 11.12.2022, 22:37
@ralphdieter

das was in meiner Frage steht….der Neu und Rechnen Button funktioniert nicht

0
ralphdieter  11.12.2022, 22:47
@Sonnenblume633

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).

0
Sonnenblume633 
Fragesteller
 11.12.2022, 22:54
@ralphdieter

Echt? Der Neu Button ist nicht falsch? Also bei mir reagiert er nicht:( liegt das vllt an meiner Maske? Ist die falsch?

0
ralphdieter  11.12.2022, 23:00
@Sonnenblume633

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.

0
ralphdieter  11.12.2022, 23:16
@Sonnenblume633

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.

0
ralphdieter  11.12.2022, 23:20
@ralphdieter

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.

0
ralphdieter  11.12.2022, 23:23
@Sonnenblume633

Irgendwo, vermutlich in main() muss der Dialog ja mal erzeugt und mit Textfeldern und Buttons befüllt werden. Zeig mal den ganzen Code.

0
Sonnenblume633 
Fragesteller
 11.12.2022, 23:53
@ralphdieter
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
0
ralphdieter  12.12.2022, 00:34
@Sonnenblume633

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).

0
Sonnenblume633 
Fragesteller
 12.12.2022, 17:24
@ralphdieter

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

0
ralphdieter  12.12.2022, 17:52
@Sonnenblume633
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


0
Sonnenblume633 
Fragesteller
 12.12.2022, 17:55
@ralphdieter

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?

0
ralphdieter  12.12.2022, 18:00
@Sonnenblume633

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).
0
Sonnenblume633 
Fragesteller
 12.12.2022, 18:04
@ralphdieter

Tut mir echt leid...ich bin zu unfähig......ich habe in meiner Frage mal meine neue Maske ergänzt...stimmt das?

0
ralphdieter  12.12.2022, 18:05
@Sonnenblume633
irgendwie bleibt sie manchmal weiß

Wie startest Du das Programm denn? Ich arbeite nur auf der Kommandozeile. dann sehe ich wenigstens alle Fehlermeldungen.

0
Sonnenblume633 
Fragesteller
 12.12.2022, 18:08
@ralphdieter

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....?

:)

0
ralphdieter  12.12.2022, 18:08
@Sonnenblume633
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.

0
Sonnenblume633 
Fragesteller
 12.12.2022, 18:11
@ralphdieter

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?

0
ralphdieter  12.12.2022, 18:16
@Sonnenblume633

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.

0
ralphdieter  12.12.2022, 18:22
@Sonnenblume633
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]   
0
ralphdieter  12.12.2022, 18:30
@ralphdieter

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 ;-)

0
Sonnenblume633 
Fragesteller
 12.12.2022, 18:41
@ralphdieter

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

0
Sonnenblume633 
Fragesteller
 12.12.2022, 18:43
@ralphdieter

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 :)

0