Java Editor BMI Rechner

Alan6

Mitglied
Hallo Zusammen,

ich versuche gerade einen einfachen BMI-Rechner mit Java-Editor (GUI) zu programmieren. Bei dem was ich programmiert habe kommt keine Fehlermeldung aber es funktioniert nicht.
Wenn ich Button (Ihr BMI ist) drücke kommt nichts.
Ich habe die unterschiedlichsten Sachen ausprobiert, doch es hat nichts gebracht.


Vielen Dank im Voraus!


Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
*
* Beschreibung
*
* @version 1.0 vom 27.02.2021
* @author
*/

public class BMI_Siar extends JFrame {
  // Anfang Attribute
  private JTextField GweichtinKg = new JTextField();
  private JTextField tfGroesseinm = new JTextField();
  private JNumberField Zahl1 = new JNumberField();
  private JNumberField Zahl2 = new JNumberField();
  private JButton IhrBMIist = new JButton();
  private JTextField ergebnis = new JTextField();
  // Ende Attribute

  public BMI_Siar() {
    // Frame-Initialisierung
    super();
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 400;
    int frameHeight = 400;
    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("BMI_Siar");
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten

    GweichtinKg.setBounds(80, 40, 113, 40);
    GweichtinKg.setText("Gweicht in Kg:");
    GweichtinKg.setFont(new Font("Dialog", Font.BOLD, 14));
    GweichtinKg.setHorizontalAlignment(SwingConstants.RIGHT);
    cp.add(GweichtinKg);
    tfGroesseinm.setBounds(80, 104, 113, 40);
    tfGroesseinm.setText("Größe in m:");
    tfGroesseinm.setHorizontalAlignment(SwingConstants.RIGHT);
    tfGroesseinm.setFont(new Font("Dialog", Font.BOLD, 14));
    cp.add(tfGroesseinm);
    Zahl1.setBounds(240, 40, 57, 41);
    Zahl1.setText("");
    cp.add(Zahl1);
    Zahl2.setBounds(240, 104, 57, 41);
    Zahl2.setText("");
    cp.add(Zahl2);
    IhrBMIist.setBounds(80, 192, 217, 41);
    IhrBMIist.setText("Ihr BMI ist:");
    IhrBMIist.setMargin(new Insets(2, 2, 2, 2));
    IhrBMIist.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        IhrBMIist_ActionPerformed(evt);
      }
    
    });   
    cp.add(IhrBMIist);
    ergebnis.setBounds(80, 256, 217, 41);
    cp.add(ergebnis);
    // Ende Komponenten

    setVisible(true);
  } // end of public BMI_Siar

  // Anfang Methoden

  public static void main(String[] args) {
    new BMI_Siar();
  } // end of main

  public void IhrBMIist_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
         float Zahl1 = 0; // in kg
      float Zahl2 = 0; // in m zum quadrat
    float ergebnis = 0;
    float BMI = 0;
      ergebnis = ((Zahl1 / (Zahl2 * Zahl2)) * 10) / 10;
        
        if (BMI > 25) {
            System.out.println("ergebnis" + BMI + " (Übergewichtig).");
        {
        
        } if (BMI == 18.5 ||BMI < 25) {
            System.out.println("ergebnis" + BMI + " (Normalgewicht).");
        } else if (BMI < 20) {
          System.out.println("ergebnis" + BMI + " (Untergewichtig).");
 
   }
}

  } // end of IhrBMIist_ActionPerformed

  // Ende Methoden
} // end of class BMI_Siar
 
Zuletzt bearbeitet von einem Moderator:
Fehlt dir da nicht ein "else" in den Bedingungen ?

Java:
if (BMI > 25) {
            System.out.println("ergebnis" + BMI + " (Übergewichtig).");
        } else if (BMI == 18.5 ||BMI < 25) {
            System.out.println("ergebnis" + BMI + " (Normalgewicht).");
        } else if (BMI < 20) {
            System.out.println("ergebnis" + BMI + " (Untergewichtig).");
        }
 
a) Also Code bitte immer in Code-Tags ("</> icon oberhalb des Eingabefeldes)

b) Und die if machen wenig Sinn so.
BMI < 15 umfasst auch BMI == 18.5 - die Prüfung auf == 18.5 kann also weggelassen werden.
Und das letzte else kommt nur noch bei BMI == 25 zum tragen. Eine Prüfung auf < 20 macht keinen Sinn, denn da wäre ja der Check mit < 25 schon aktiv geworden.

c) Du rechnest nur mit lokalen variablen, die 0 sind:

Java:
public void IhrBMIist_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    float Zahl1 = 0; // in kg
    float Zahl2 = 0; // in m zum quadrat
    float ergebnis = 0;
    float BMI = 0;
    ergebnis = ((Zahl1 / (Zahl2 * Zahl2)) * 10) / 10;

Und damit dividierst Du durch 0, d.h. zu den if dürftest Du nicht erst kommen. Du willst ja in den Variablen den Inhalt der Controls haben. Also musst Du die Controls auslesen... Die Controls heißen teilweise so, wie die lokalen Variablen ... das ist auch recht unschön...

d) Benennung von Variablen: Variablen bitte immer mit einem kleinen Buchstaben starten. Also zahl1, zahl2, bmi, ... Und dann sollen die Namen etwas aussagen - also nicht einfach zahl1 / zahl2 ... also zahl1 könnte gewichtTextfeld sein (Instanzvariable) und gewicht (lokale Variable) ...
 
Vielen lieben Dank!

Carcharoth+kneitzel​

Wenn ich bei "zahl1" bzw. zahl2 "float zahl1=0;" Null weglasse, dann sagt er "Die Variable zahl1 wurde möglicherweise nicht initialisiert"
Ich habe den Rechner grafisch (GUI) programmiert. Mir fehlen 3 Sachen: 1) initialisieren 2) Ausgabe nicht auf Konsole, sondern auf Grafik 3) Er rechnet nicht.
 
Du musst, wie kneitzel geschrieben hat, verschiedene Namen vergeben für einerseits die Elemente deiner GUI (z.B. einem Textfeld wo das Gewicht vom User eingegeben wird) und für die Zahl die zur Berechnung verwendet wird.

Danach kannst du in deiner Methode IhrBMIist_ActionPerformed das Gewicht aus dem Textfeld in die Berechnungsvariable auslesen und erst dann die Berechnung durchführen. So wird die Variable auch gleich initialisiert.
 
Hi Blender3D,

vielen Dank für deinen Beitrag.

Scheinbar gibt es mehrere Möglichkeiten wie man so einen kleinen und einfachen BMI-Rechner mit java programmiert. Für Anfänger wie ich ist es eine gute Aufgabe.

Ich habe mich für folgende Version entschieden, das einzige, was nicht funktioniert ist die BMI Formel rechnen lassen.

zwischen = zahl1 / (zahl2 * zahl2) * 10/10 akzeptiert er nicht. Mal sagt er es fehlt ein Komma, mal meckert er wegen dem Stern (*) als Multiplikation usw.

Also habe „Math.random“ versucht, siehe es funktioniert aber die Ergebnisse sind falsch. Auch verständlich denn „Math.random“ ist dafür nicht geeignet. Was ich möchte ist genau ein Operator wie „Math.random“ aber nicht „Zufall“ rechnet.

Vielen Dank im Voraus und schönes Wochenende!

[CODE lang="java" title="BMI-Rechner"] double zwischen = 0;
zwischen = Math.random ()*"zahl1 / (zahl2 * zahl2) * 10/10".length();
double bmi = zwischen;
ergebnis.setText (Double.toString (zwischen));

if (zwischen > 25) {
System.out.println("" +bmi+ "(Uebergewichtig)");
} else if (zwischen ==20) {
System.out.println("" +bmi+ "(Normalgewicht)");
} else if (zwischen < 20) {
System.out.println("" +bmi+ "(Untergewichtig)");
}
[/CODE]
 
Nur einmal zu der Erläuterung ein kleiner Vergleich:
Du hast da ja Cotrols - das vergleichen wir mal mit Zetteln. Du kannst doch nicht Rechnen: 1. Zettel * 2. Zettel - 3. Zettel oder so.

Wenn auf den Zetteln Zahlen stehen, dann kannst Du aber mit den Zahlen Rechnen:
Zahl vom ersten Zettel mal Zahl vom Zeiten Zettel - Zahl vom dritten Zettel.

Das ist bei den Controls genau so:
- Du musst von jedem Control erst einmal ermitteln, was da für eine Zahl enthalten ist.
- Wenn Du die Zahl dann hast, dann kannst Du mit der Zahl rechnen.

Bei einem JTextField ist aber Text eingegeben. Also musst Du den Text noch in eine Zahl umwandeln.
An den Text kommst Du mittels getText() und umwandeln in eine Zahl kannst Du mit Double.parseDouble(text).
Bei JNumberFiled musst Du schauen, was das für Methoden bereit stellt. Das ist keine Klasse des Java Frameworks. Das kann ähnlich sein oder evtl. gibt es da bereits eine Methode, um direkt die Zahl zu bekommen.
 

Neue Themen


Zurück
Oben