BMI-Rechner NumberFormatException

musikfreak

Mitglied
Tach Leute,
wie die anderen habe auch ich Probleme einen ordentlichen BMI Rechner zu erstellen. Die meisten eurer Tipps waren hilfreich :toll: . Jedoch wird mein BMI Rechner zwar geöffnet aber er macht nichts. Zudem kommen immer Fehlermeldungen.

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.TextField;
import java.awt.event.*;

import javax.swing.*;

import java.text.DecimalFormat;
import java.text.NumberFormat;
public class BMI3 extends JFrame {
    
    JTextField tf_ein = new JTextField();    
    JTextField tf_ein1 = new JTextField();
    TextField tf_aus = new TextField();
    TextField tf_aus1 = new TextField();
    
    
    JLabel myL01 = new JLabel("Körpergröße");
    JLabel myL03 = new JLabel("Ergebnis: "); 
    JLabel myL02 = new JLabel("Gewicht");
    JLabel myL04 = new JLabel("Meter");
    JLabel myL05 = new JLabel("Kg");
    JLabel myL07 = new JLabel("Diagnose:");
    double Masse,Körpergröße,ergebnis;
    
    DecimalFormat df = new DecimalFormat("0.000");
    
    public BMI3() {
        
        JPanel myP = new JPanel();            
        myP.setLayout(null);                       
        myP.setBackground(Color.YELLOW);    

        JButton myB = new JButton("Berechne BMI");  
        JButton myB02 = new JButton("Ende");
        myB.setBackground(Color.RED);myB02.setBackground(Color.RED);
        myB.setToolTipText("Hier drücken, um Ergebnis zu erhalten "); 
        myB02.setToolTipText("Hier wird das Programm beendet");
    
        myB.setBounds(10,250, 150, 30); myB02.setBounds(200,250,150,30);        
        myL01.setBounds(10,30, 300, 30);
        myL02.setBounds(10, 100,1000, 30);   
        myL03.setBounds(200,40,200,20);
        myL04.setBounds(70,70,200,20);
        myL05.setBounds(70,150,200,20);
        myL07.setBounds(200,120,200,20);
        tf_ein.setBounds(10,60, 50, 30);           
        tf_ein1.setBounds(10,140,50,30);
        tf_aus.setBounds(200, 60, 200, 21);
        tf_aus1.setBounds(200, 140, 200, 21);
        
        add(myP);    
        myP.add(myB);myP.add(myB02); 
        myP.add(tf_ein); myP.add(tf_ein1);myP.add(tf_aus);myP.add(tf_aus1);myP.add(myL07);
        myP.add(myL01); myP.add(myL02);myP.add(myL03);myP.add(myL04);myP.add(myL05);
        
        setTitle("Body Mass Index");   
        setPreferredSize(new Dimension(450,450));  
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);  
        
        tf_aus.setText("");
        tf_aus1.setText("");
        
        myB.addActionListener(new ActionListener() {  
            @SuppressWarnings("unused")
            public void myBActionPerformed(ActionEvent evt) {
                 myBActionPerformed (evt);}

            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                
            }});
        myB02.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
        System.exit(0);
            }});
                double Masse = Double.parseDouble(tf_ein.getText());
                double Körpergröße = Double.parseDouble(tf_ein1.getText());
                double ergebnis = Masse / (Körpergröße * Körpergröße);
                String bemerkung="Ungültiger BMI";
                if(ergebnis>0){bemerkung="Starkes Untergewicht";}
                if(ergebnis>16){bemerkung="Mäßiges Untergewicht";}
                if(ergebnis>17){bemerkung="Leichtes Untergewicht";}
                if(ergebnis>18.5){bemerkung="Normalgewicht";}
                if(ergebnis>25){bemerkung="Präadipositas";}
                if(ergebnis>30){bemerkung="Adipositas Grad I";}
                if(ergebnis>35){bemerkung="Adipositas Grad II";}
                if(ergebnis>40){bemerkung="Adipositas Grad III";}
                tf_aus1.setText(bemerkung);
                ;
            }

            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                ; 
                
            }
            
            public static void main(String[ ] args) {
                BMI3 myFenster = new BMI3(); 
            }
            {
            }
            
        }


und als Fehlermeldung erscheint immer

Exception in thread "main" java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
at BMI3.<init>(BMI3.java:81)
at BMI3.main(BMI3.java:104)


was habe ich falsch gemacht und was muss ich verbessern?

Gruß
 
Die Exception kommt weil du schon direkt beim Start versuchst, die Eingabe aus den Textfeldern zu einem double zu parsen. Zu dem Zeitpunkt wurde ja aber noch gar nichts eingegeben (String empty = leer). Du willst das doch wahrscheinlich erst machen, nachdem der Button gedrückt wurde?! Du müsstest also die betreffenden Zeilen in den ActionListener verschieben!
Dazu solltest du unbedingt noch ein wenig lesen, denn deine Vorgehensweise mit den Listener..
Java:
			public void myBActionPerformed(ActionEvent evt) {
				myBActionPerformed(evt);
das macht keinen Sinn 😉
 
Danke für die Antwort. Um ehrlich zu sein habe ich wenig Ahnung vom programmieren. Ich muss das für die Schule fertig machen.
Deshalb kann ich auch meistens nicht ganz folgen, wenn ihr mir wichtige Sachen erklärt 🙁

Also was soll ich ich jetzt genau verändern?

Gruß
 
ist das jetzt so richtig?
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.TextField;
import java.awt.event.*;

import javax.swing.*;

import java.text.DecimalFormat;
import java.text.NumberFormat;
public class BMI3 extends JFrame {
	
	JTextField tf_ein = new JTextField();    
    JTextField tf_ein1 = new JTextField();
    TextField tf_aus = new TextField();
    TextField tf_aus1 = new TextField();
	
	
    JLabel myL01 = new JLabel("Körpergröße");
    JLabel myL03 = new JLabel("Ergebnis: "); 
	JLabel myL02 = new JLabel("Gewicht");
	JLabel myL04 = new JLabel("Meter");
	JLabel myL05 = new JLabel("Kg");
	JLabel myL07 = new JLabel("Diagnose:");
	double Masse,Körpergröße,ergebnis;
	
	DecimalFormat df = new DecimalFormat("0.000");
	
	public BMI3() {
		
		JPanel myP = new JPanel();            
		myP.setLayout(null);                       
		myP.setBackground(Color.YELLOW);    

		JButton myB = new JButton("Berechne BMI");  
		JButton myB02 = new JButton("Ende");
		myB.setBackground(Color.RED);myB02.setBackground(Color.RED);
		myB.setToolTipText("Hier drücken, um Ergebnis zu erhalten "); 
		myB02.setToolTipText("Hier wird das Programm beendet");
	
		myB.setBounds(10,250, 150, 30); myB02.setBounds(200,250,150,30);        
		myL01.setBounds(10,30, 300, 30);
		myL02.setBounds(10, 100,1000, 30);   
		myL03.setBounds(200,40,200,20);
		myL04.setBounds(70,70,200,20);
		myL05.setBounds(70,150,200,20);
		myL07.setBounds(200,120,200,20);
		tf_ein.setBounds(10,60, 50, 30);           
		tf_ein1.setBounds(10,140,50,30);
		tf_aus.setBounds(200, 60, 200, 21);
		tf_aus1.setBounds(200, 140, 200, 21);
		
		add(myP);    
		myP.add(myB);myP.add(myB02); 
		myP.add(tf_ein); myP.add(tf_ein1);myP.add(tf_aus);myP.add(tf_aus1);myP.add(myL07);
		myP.add(myL01); myP.add(myL02);myP.add(myL03);myP.add(myL04);myP.add(myL05);
		
		setTitle("Body Mass Index");   
		setPreferredSize(new Dimension(450,450));  
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setVisible(true);  
		
		tf_aus.setText("");
		tf_aus1.setText("");}
		
		
			public void myBActionPerformed(ActionEvent evt) {
				 myBActionPerformed (evt);}

			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				
		
		myB02.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
		System.exit(0);
			
		        double Masse = Double.parseDouble(tf_ein.getText());
		        double Körpergröße = Double.parseDouble(tf_ein1.getText());
		        double ergebnis = Masse / (Körpergröße * Körpergröße);
		        String bemerkung="Ungültiger BMI";
		        if(ergebnis>0){bemerkung="Starkes Untergewicht";}
		        if(ergebnis>16){bemerkung="Mäßiges Untergewicht";}
		        if(ergebnis>17){bemerkung="Leichtes Untergewicht";}
		        if(ergebnis>18.5){bemerkung="Normalgewicht";}
		        if(ergebnis>25){bemerkung="Präadipositas";}
		        if(ergebnis>30){bemerkung="Adipositas Grad I";}
		        if(ergebnis>35){bemerkung="Adipositas Grad II";}
		        if(ergebnis>40){bemerkung="Adipositas Grad III";}
		        tf_aus1.setText(bemerkung);}});
		        ;
		    }

	
				
			
			
			public static void main(String[ ] args) {
				BMI3 myFenster = new BMI3(); 
			}
			{
			}
			
		}
 
Zuletzt bearbeitet:
ist das jetzt so richtig?

Anscheinend nicht oder? Bitte lies doch auch mal den Link! Programmieren ist nicht einfach doofes rum probieren bis man durch Glück die richtigen Zeilen an die richtige Stelle gepackt hat(wobei das Programm schon längst laufen würde wenn du einfach nur genau gelesen hättest was zu tun ist *g*)

Vllt nochmal die Geschichten mit den Listenern neu anfangen?
Java:
		myB.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				//hier der code der ausgeührt werdne soll wenn button1 geklickt wurde
			}
		});
		
		myB02.addActionListener(new ActionListener() {	
			@Override
			public void actionPerformed(ActionEvent e) {
				//hier der code der ausgeührt werdne soll wenn button2 geklickt wurde
			}
		});
 
Anscheinend nicht oder? Bitte lies doch auch mal den Link! Programmieren ist nicht einfach doofes rum probieren bis man durch Glück die richtigen Zeilen an die richtige Stelle gepackt hat(wobei das Programm schon längst laufen würde wenn du einfach nur genau gelesen hättest was zu tun ist *g*)

Mein Problem ist, dass ich für die Computerwelt nicht geschaffen bin. Ich bin froh, wenn ich einen Computer einschalten kann 😳 .

Zudem habe ich den Link gelsen, aber nicht verstanden 🙁
 
Zudem habe ich den Link gelsen, aber nicht verstanden 🙁
Okay einen Versuch mache ich noch
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class BMI3 extends JFrame {

	JTextField tf_ein = new JTextField();
	JTextField tf_ein1 = new JTextField();
	TextField tf_aus = new TextField();
	TextField tf_aus1 = new TextField();

	JLabel myL01 = new JLabel("Körpergröße");
	JLabel myL03 = new JLabel("Ergebnis: ");
	JLabel myL02 = new JLabel("Gewicht");
	JLabel myL04 = new JLabel("Meter");
	JLabel myL05 = new JLabel("Kg");
	JLabel myL07 = new JLabel("Diagnose:");
	double Masse, Körpergröße, ergebnis;

	DecimalFormat df = new DecimalFormat("0.000");

	public BMI3() {

		JPanel myP = new JPanel();
		myP.setLayout(null);
		myP.setBackground(Color.YELLOW);

		JButton myB = new JButton("Berechne BMI");
		JButton myB02 = new JButton("Ende");
		myB.setBackground(Color.RED);
		myB02.setBackground(Color.RED);
		myB.setToolTipText("Hier drücken, um Ergebnis zu erhalten ");
		myB02.setToolTipText("Hier wird das Programm beendet");

		myB.setBounds(10, 250, 150, 30);
		myB02.setBounds(200, 250, 150, 30);
		myL01.setBounds(10, 30, 300, 30);
		myL02.setBounds(10, 100, 1000, 30);
		myL03.setBounds(200, 40, 200, 20);
		myL04.setBounds(70, 70, 200, 20);
		myL05.setBounds(70, 150, 200, 20);
		myL06.setBounds(10, 345, 200, 20);
		myL07.setBounds(200, 120, 200, 20);
		tf_ein.setBounds(10, 60, 50, 30);
		tf_ein1.setBounds(10, 140, 50, 30);
		tf_aus.setBounds(200, 60, 200, 21);
		tf_aus1.setBounds(200, 140, 200, 21);

		add(myP);
		myP.add(myB);
		myP.add(myB02);
		myP.add(tf_ein);
		myP.add(tf_ein1);
		myP.add(tf_aus);
		myP.add(tf_aus1);
		myP.add(myL07);
		myP.add(myL01);
		myP.add(myL02);
		myP.add(myL03);
		myP.add(myL04);
		myP.add(myL05);
		myP.add(myL06);

		setTitle("Body Mass Index");
		setPreferredSize(new Dimension(450, 450));
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setVisible(true);

		tf_aus.setText("");
		tf_aus1.setText("");
		
		myB.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				//hier der code der ausgeührt werdne soll wenn button1 geklickt wurde
			}
		});
		
		myB02.addActionListener(new ActionListener() {	
			@Override
			public void actionPerformed(ActionEvent e) {
				//hier der code der ausgeührt werdne soll wenn button2 geklickt wurde
			}
		});
	}

	public static void main(String[] args) {
		BMI3 myFenster = new BMI3();
	}
}

Habe deinen Code mal aufgeräumt. Die Stellen mit den Kommentaren musst du nun entsprechend anpassen, das schaffst du schon.
 
Zuletzt bearbeitet:
Bin ich jetzt auf dem richtigen Weg?

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.*;
import javax.swing.*;
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class BMI2 extends JFrame {
	
	JTextField myT = new JTextField();    
    JTextField myT02 =new JTextField();
	
    JLabel myL01 = new JLabel("Körpergröße");
    JLabel myL03 = new JLabel("Ergebnis: "); 
	JLabel myL02 = new JLabel("Gewicht");
	JLabel myL04 = new JLabel("Meter");
	JLabel myL05 = new JLabel("Kg");
	
	
	double Masse,Körpergröße,ergebnis;
	
	DecimalFormat df = new DecimalFormat("0.000");
	
	public BMI2() {
		
		JPanel myP = new JPanel();            
		myP.setLayout(null);                       
		myP.setBackground(Color.YELLOW);    

		JButton myB = new JButton("Berechne BMI");  
		myB.setBackground(Color.RED);
		myB.setToolTipText("Hier drücken, um Ergebnis zu erhalten "); 
	
		myB.setBounds(10,250, 150, 30);         
		myL01.setBounds(10,30, 300, 30);
		myL02.setBounds(10, 100,1000, 30);   
		myL03.setBounds(10,200,200,20);
		myL04.setBounds(70,70,200,20);
		myL05.setBounds(70,150,200,20);
		
		myT.setBounds(10,60, 50, 30);           
		myT02.setBounds(10,140,50,30);
		
		add(myP);    
		myP.add(myB); 
		myP.add(myT); myP.add(myT02);
		myP.add(myL01); myP.add(myL02);myP.add(myL03);myP.add(myL04);myP.add(myL05);
		
		setTitle("Body Mass Index");   
		setPreferredSize(new Dimension(300,400));  
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setVisible(true);  
		
		myB.addActionListener(new ActionListener() {  
			public void actionPerformed(ActionEvent e) {
				try {                                                                
				
					Masse = Double.parseDouble(myT02.getText( )); 
					Körpergröße=Double.parseDouble(myT.getText( )); 
			    }
			    catch (NumberFormatException n) {
			    	myL03.setText("Eingabefehler.Bitte Zahl eingeben!"); 
			    	return;
			    }
			    ergebnis=Masse/(Körpergröße*Körpergröße);
			    myL03.setText("Dein BMI: "+df.format(ergebnis)+"  Kg/m²");
			    
			}
		} 
		); 
		
	}
	
	public static void main(String[ ] args) {
		BMI2 myFenster = new BMI2(); 
	}
}
 
Das Programm lässt sich ausführen, aber wenn ich Zahlen eingebe und auf "Berechne BMI" klicke steht da nur "Eingabefehler! Bitte Zahl eingeben" .

Was nun?
 
Ein Double (in das deine Eingabe geparst werden soll) wird in Java mit einem Punkt als "Trennzeichen" erwartet...wenn du also deine Körpergröße mit 1.82 angibst(nicht 1,82) klappt das einwandfrei.

Entweder weißt du den Benutzer darauf hin, oder du änderst jedes eingebene Komma in einen Punkt!
 


Also mit dem hier gepostetem Beispiel klappt das einwandfrei bei mir.

edit:
in diesem Codeteil gibt es keine "Ausgabe" nur "gedrück", welchen Code führst du denn gerade aus 😀 ?
 
Zuletzt bearbeitet:
das schon nur ich muss noch so eine Art Auswertung und so weiter mit einbringen

Java:
 public void auswertung(){
    if (bmi< 16)
           {System.out.println("Sie haben starkes Untergewicht.");}
        else
          if (bmi>=16 && bmi<= 16.99)
              {System.out.println("Sie haben mäßiges Untergewicht");}
          else
            if (bmi >=17 && bmi<= 18.49)
               {System.out.println("Sie haben leichtes Untergewicht.");}
            else
              if (bmi >=18.5 && bmi<=24.99)
                  {System.out.println("Sie haben normales Gewicht");}
              else
                if (bmi>=25 && bmi<29.99)
                    {System.out.println("Sie sind Präadipositas");}
                else
                  if (bmi>=30 && bmi<34.99)
                      {System.out.println("Sie sind Adipositas Grad 1");}
                  else
                    if (bmi>=35 && bmi<39.99)
                        {System.out.println("Sie haben Adipositas Grad 2");}
                    else
                          {System.out.println("Sie haben Adipositas Grad 3");}

Wie mache ich das?
 
wo muss ich ansetzten?

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.*;
import javax.swing.*;
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class BMI2 extends JFrame {
    
    JTextField myT = new JTextField();    
    JTextField myT02 =new JTextField();
    
    JLabel myL01 = new JLabel("Körpergröße");
    JLabel myL03 = new JLabel("Ergebnis: "); 
    JLabel myL02 = new JLabel("Gewicht");
    JLabel myL04 = new JLabel("Meter");
    JLabel myL05 = new JLabel("Kg");
    
    
    double Masse,Körpergröße,ergebnis;
    
    DecimalFormat df = new DecimalFormat("0.000");
    
    public BMI2() {
        
        JPanel myP = new JPanel();            
        myP.setLayout(null);                       
        myP.setBackground(Color.YELLOW);    
 
        JButton myB = new JButton("Berechne BMI");  JButton myB02 = new JButton("Ende");
        myB.setBackground(Color.RED); myB02.setBackground(Color.RED);
        myB.setToolTipText("Hier drücken, um Ergebnis zu erhalten ");myB02.setToolTipText("Hier wird das Programm beendet"); 
    
        myB.setBounds(10,250, 150, 30);  myB02.setBounds(10,300,150,30);       
        myL01.setBounds(10,30, 300, 30);
        myL02.setBounds(10, 100,1000, 30);   
        myL03.setBounds(10,200,200,20);
        myL04.setBounds(70,70,200,20);
        myL05.setBounds(70,150,200,20);
        
        myT.setBounds(10,60, 50, 30);           
        myT02.setBounds(10,140,50,30);
        
        add(myP);    
        myP.add(myB); myP.add(myB02);
        myP.add(myT); myP.add(myT02);
        myP.add(myL01); myP.add(myL02);myP.add(myL03);myP.add(myL04);myP.add(myL05);
        
        setTitle("Body Mass Index");   
        setPreferredSize(new Dimension(300,400));  
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);  
        
        myB.addActionListener(new ActionListener() {  
            public void actionPerformed(ActionEvent e) {
                try {                                                                
                
                    Masse = Double.parseDouble(myT02.getText( )); 
                    Körpergröße=Double.parseDouble(myT.getText( )); 
                }
                catch (NumberFormatException n) {
                    myL03.setText("Eingabefehler.Bitte Zahl eingeben!"); 
                    return;
                }
                ergebnis=Masse/(Körpergröße*Körpergröße);
                myL03.setText("Dein BMI: "+df.format(ergebnis)+"");
                
            }
        } 
        ); 
    myB02.addActionListener(new ActionListener() {  
        public void actionPerformed(ActionEvent e) {
        	System.exit(0);}});
        }
    
        public void auswertung(){
        	
            if (ergebnis< 16)
                   {System.out.println("Sie haben starkes Untergewicht.");}
                else
                  if (ergebnis>=16 && ergebnis<= 16.99)
                      {System.out.println("Sie haben mäßiges Untergewicht");}
                  else
                    if (ergebnis >=17 && ergebnis<= 18.49)
                       {System.out.println("Sie haben leichtes Untergewicht.");}
                    else
                      if (ergebnis >=18.5 && ergebnis<=24.99)
                          {System.out.println("Sie haben normales Gewicht");}
                      else
                        if (ergebnis>=25 && ergebnis<29.99)
                            {System.out.println("Sie sind Präadipositas");}
                        else
                          if (ergebnis>=30 && ergebnis<34.99)
                              {System.out.println("Sie sind Adipositas Grad 1");}
                          else
                            if (ergebnis>=35 && ergebnis<39.99)
                                {System.out.println("Sie haben Adipositas Grad 2");}
                            else
                                  {System.out.println("Sie haben Adipositas Grad 3");}
         
        
    }
    
    public static void main(String[ ] args) {
        BMI2 myFenster = new BMI2(); 
    }
}
 
Da ergebnis eine globale Variable ist kannst Du einfach nach
ergebnis=Masse/(Körpergröße*Körpergröße);
die Methode
auswertung() aufrufen.
 
Da du deine Analyse des BMI´s ja auch auf dem Frame haben willst, sollte deine Analyse ungefähr so aussehen:

Java:
//der String analyse muss global deklariert werden
String analyse;
public void auswertung() {

		if (ergebnis < 16) {
			analyse =" Sie haben starkes Untergewicht.";
		
              //	System.out.println("Sie haben starkes Untergewicht.");

und dann rufst du halt in deiner action-perform Methode die auswertungs-Methode auf:

Java:
	public void actionPerformed(ActionEvent e) {
				try {

					Masse = Double.parseDouble(myT02.getText());
					Körpergröße = Double.parseDouble(myT.getText());
				} catch (NumberFormatException n) {
					myL03.setText("Eingabefehler.Bitte Zahl eingeben!");
					return;
				}
				ergebnis = Masse / (Körpergröße * Körpergröße);
				auswertung();
				myL03.setText("Dein BMI: " + df.format(ergebnis)) ;
				// myL06.setText(analyse);

			}
		});

und wenn du dir dann noch ein [c] myL06 [/c] in dem Frame "gemacht" hast, bekommst du die Ausgabe auch in dem Frame...
 
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.*;
import javax.swing.*;
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class BMI4 extends JFrame {
    
    JTextField myT = new JTextField();    
    JTextField myT02 =new JTextField();
    
    JLabel myL01 = new JLabel("Körpergröße:");
    JLabel myL03 = new JLabel("Ergebnis: "); 
    JLabel myL02 = new JLabel("Gewicht:");
    JLabel myL04 = new JLabel("Meter");
    JLabel myL05 = new JLabel("Kg");
    JLabel myL06 = new JLabel("Hinweis: Körpergröße mit einem Punkt abtrennen!");
   
    
    double Masse,Körpergröße,ergebnis;
    
    DecimalFormat df = new DecimalFormat("0.000");
    
    public BMI4() {
        
        JPanel myP = new JPanel();            
        myP.setLayout(null);                       
        myP.setBackground(Color.YELLOW);    
 
        JButton myB = new JButton("Berechne BMI");  JButton myB02 = new JButton("Ende");
        myB.setBackground(Color.RED); myB02.setBackground(Color.RED);
        myB.setToolTipText("Hier drücken, um Ergebnis zu erhalten ");myB02.setToolTipText("Hier wird das Programm beendet"); 
    
        myB.setBounds(10,250, 150, 30);  myB02.setBounds(10,300,150,30);       
        myL01.setBounds(10,30, 300, 30);
        myL02.setBounds(10, 100,1000, 30);   
        myL03.setBounds(10,200,200,20);
        myL04.setBounds(170,70,200,20);
        myL05.setBounds(170,150,200,20);
        myL06.setBounds(10,10,400,20);
        
        myT.setBounds(100,60, 50, 30);           
        myT02.setBounds(100,140,50,30);
        
        add(myP);    
        myP.add(myB); myP.add(myB02);
        myP.add(myT); myP.add(myT02);
        myP.add(myL01); myP.add(myL02);myP.add(myL03);myP.add(myL04);myP.add(myL05);myP.add(myL06);
        
        setTitle("Body Mass Index");   
        setPreferredSize(new Dimension(320,400));  
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);  
        
        myB.addActionListener(new ActionListener() {  
            public void actionPerformed(ActionEvent e) {
                try {                                                                
                
                    Masse = Double.parseDouble(myT02.getText( )); 
                    Körpergröße=Double.parseDouble(myT.getText( )); 
                }
                catch (NumberFormatException n) {
                    myL03.setText("Eingabefehler.Bitte Zahl eingeben!"); 
                    return;
                }
                ergebnis=Masse/(Körpergröße*Körpergröße);
                myL03.setText("Dein BMI: "+df.format(ergebnis)+"");
                
            }
        } 
        ); 
    myB02.addActionListener(new ActionListener() {  
        public void actionPerformed(ActionEvent e) {
        	System.exit(0);}});
        }
    
    String analyse;
        public void auswertung(){
        	

            if (ergebnis< 16)
                   {System.out.println("Sie haben starkes Untergewicht.");}
                else
                  if (ergebnis>=16 && ergebnis<= 16.99)
                      {System.out.println("Sie haben mäßiges Untergewicht");}
                  else
                    if (ergebnis >=17 && ergebnis<= 18.49)
                       {System.out.println("Sie haben leichtes Untergewicht.");}
                    else
                      if (ergebnis >=18.5 && ergebnis<=24.99)
                          {System.out.println("Sie haben normales Gewicht");}
                      else
                        if (ergebnis>=25 && ergebnis<29.99)
                            {System.out.println("Sie sind Präadipositas");}
                        else
                          if (ergebnis>=30 && ergebnis<34.99)
                              {System.out.println("Sie sind Adipositas Grad 1");}
                          else
                            if (ergebnis>=35 && ergebnis<39.99)
                                {System.out.println("Sie haben Adipositas Grad 2");}
                            else
                                  {System.out.println("Sie haben Adipositas Grad 3");}}
        
            public void actionPerformed(ActionEvent e) {
                try {
 
                    Masse = Double.parseDouble(myT02.getText());
                    Körpergröße = Double.parseDouble(myT.getText());
                } catch (NumberFormatException n) {
                    myL03.setText("Eingabefehler.Bitte Zahl eingeben!");
                    return;
                }
                ergebnis = Masse / (Körpergröße * Körpergröße);
                auswertung();
                myL03.setText("Dein BMI: " + df.format(ergebnis)) ;
                // myL06.setText(analyse);
 
            }
        {;
         
        
    }
    
    public static void main(String[ ] args) {
        BMI4 myFenster = new BMI4(); 
    }
}

so? aber da hat sich bei mir nichts geändert 🙁
 
ne, du sollst auch keine neue ActionPerform-Methode schreiben...sondern die aktuelle ändern.
deine analyse muss noch angepasst werden und evtl. die Optik...aber DU machst das schon 😀

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.*;
import javax.swing.*;
import java.text.DecimalFormat;
import java.text.NumberFormat;

public class BMI4 extends JFrame {

    JTextField myT = new JTextField();
    JTextField myT02 = new JTextField();

    JLabel myL01 = new JLabel("Körpergröße:");
    JLabel myL03 = new JLabel("Ergebnis: ");
    JLabel myL02 = new JLabel("Gewicht:");
    JLabel myL04 = new JLabel("Meter");
    JLabel myL05 = new JLabel("Kg");
    JLabel myL06 = new JLabel("Hinweis: Körpergröße mit einem Punkt abtrennen!");

    double Masse, Körpergröße, ergebnis;

    DecimalFormat df = new DecimalFormat("0.000");

    public BMI4() {

        JPanel myP = new JPanel();
        myP.setLayout(null);
        myP.setBackground(Color.YELLOW);

        JButton myB = new JButton("Berechne BMI");
        JButton myB02 = new JButton("Ende");
        myB.setBackground(Color.RED);
        myB02.setBackground(Color.RED);
        myB.setToolTipText("Hier drücken, um Ergebnis zu erhalten ");
        myB02.setToolTipText("Hier wird das Programm beendet");

        myB.setBounds(10, 250, 150, 30);
        myB02.setBounds(10, 300, 150, 30);
        myL01.setBounds(10, 30, 300, 30);
        myL02.setBounds(10, 100, 1000, 30);
        myL03.setBounds(10, 200, 200, 20);
        myL04.setBounds(170, 70, 200, 20);
        myL05.setBounds(170, 150, 200, 20);
        myL06.setBounds(10, 10, 400, 20);

        myT.setBounds(100, 60, 50, 30);
        myT02.setBounds(100, 140, 50, 30);

        add(myP);
        myP.add(myB);
        myP.add(myB02);
        myP.add(myT);
        myP.add(myT02);
        myP.add(myL01);
        myP.add(myL02);
        myP.add(myL03);
        myP.add(myL04);
        myP.add(myL05);
        myP.add(myL06);

        setTitle("Body Mass Index");
        setPreferredSize(new Dimension(320, 400));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);

        myB.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {

                    Masse = Double.parseDouble(myT02.getText());
                    Körpergröße = Double.parseDouble(myT.getText());
                } catch (NumberFormatException n) {
                    myL03.setText("Eingabefehler.Bitte Zahl eingeben!");
                    return;
                }

                ergebnis = Masse / (Körpergröße * Körpergröße);
                auswertung();
                myL03.setText("Dein BMI: " + df.format(ergebnis) + "");
                myL06.setText(analyse);

            }
        });
        myB02.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
    }

    String analyse;

    public void auswertung() {

        if (ergebnis < 16) {
            analyse = "Sie haben starkes Untergewicht.";
        } else if (ergebnis >= 16 && ergebnis <= 16.99) {
            analyse="Sie haben starkes Untergewicht.";
            System.out.println("Sie haben mäßiges Untergewicht");
        } else if (ergebnis >= 17 && ergebnis <= 18.49) {
            analyse="Sie haben starkes Untergewicht.";
            System.out.println("Sie haben leichtes Untergewicht.");
        } else if (ergebnis >= 18.5 && ergebnis <= 24.99) {
            analyse="Sie haben starkes Untergewicht.";
            System.out.println("Sie haben normales Gewicht");
        } else if (ergebnis >= 25 && ergebnis < 29.99) {
            analyse="Sie haben starkes Untergewicht.";
            System.out.println("Sie sind Präadipositas");
        } else if (ergebnis >= 30 && ergebnis < 34.99) {
            analyse="Sie haben starkes Untergewicht.";
            System.out.println("Sie sind Adipositas Grad 1");
        } else if (ergebnis >= 35 && ergebnis < 39.99) {
            analyse="Sie haben starkes Untergewicht.";
            System.out.println("Sie haben Adipositas Grad 2");
        } else {
            analyse="Sie haben Adipositas Grad 3";
        }
    }

    {
        ;

    }

    public static void main(String[] args) {
        BMI4 myFenster = new BMI4();
    }
}
 
danke für die verbesserte Version 🙂 Aber ich habe da noch eine Frage:

und zwar soll ich das als JAR- Datei auf dem Schulserver hochladen. Dabei soll das mit dem Ergebnis, ob man übergewichtig ist etc. in dem Programm mit auftauchen, am besten unter dem Ergebnis des BMI. Wie mache ich das?
 
sorry war mein Fehler 😀 Ich hätte das mal vorher schon als JAR machen sollen 🙂

Aber ein Fehler tritt bei mir immer noch auf:

als Ergebnis steht dann immer bei 1,80 Meter und 270 Kg "Sie haben starkes Untergewicht" oder bei 1,80 Meter und 300 Kg "Sie haben Adipositas 3" 😀 🙂 Aber dazwischen gibt es keine andren einstufungen. Was ist diesmal falsch? habe ich da was mit dem System.out.println verwechselt?

Java:
String analyse;
 
    public void auswertung() {
 
        if (ergebnis < 16) {
            analyse = "Sie haben starkes Untergewicht.";
        } else if (ergebnis >= 16 && ergebnis <= 16.99) {
            analyse="Sie haben starkes Untergewicht.";
            System.out.println("Sie haben mäßiges Untergewicht");
        } else if (ergebnis >= 17 && ergebnis <= 18.49) {
            analyse="Sie haben starkes Untergewicht.";
            System.out.println("Sie haben leichtes Untergewicht.");
        } else if (ergebnis >= 18.5 && ergebnis <= 24.99) {
            analyse="Sie haben starkes Untergewicht.";
            System.out.println("Sie haben normales Gewicht");
        } else if (ergebnis >= 25 && ergebnis < 29.99) {
            analyse="Sie haben starkes Untergewicht.";
            System.out.println("Sie sind Präadipositas");
        } else if (ergebnis >= 30 && ergebnis < 34.99) {
            analyse="Sie haben starkes Untergewicht.";
            System.out.println("Sie sind Adipositas Grad 1");
        } else if (ergebnis >= 35 && ergebnis < 39.99) {
            analyse="Sie haben starkes Untergewicht.";
            System.out.println("Sie haben Adipositas Grad 2");
        } else {
            analyse="Sie haben Adipositas Grad 3";
        }
    }
 
    {
        ;
 
    }
 
deine analyse ist ja immer "Sie haben starkes Untergewicht" (ausser im else-Zweig). Hab jetzt den kompletten Thread nicht gelesen aber müsste dein String in der consolenausgabe nicht eher analyse initialisieren??
 

Zurück
Oben