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ß
 

eRaaaa

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

musikfreak

Mitglied
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ß
 

musikfreak

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

eRaaaa

Top Contributor
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
			}
		});
 

musikfreak

Mitglied
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 :oops: .

Zudem habe ich den Link gelsen, aber nicht verstanden :(
 

eRaaaa

Top Contributor
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:

musikfreak

Mitglied
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(); 
	}
}
 

musikfreak

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

jgh

Top Contributor
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!
 

jgh

Top Contributor


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 :D ?
 
Zuletzt bearbeitet:

musikfreak

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

musikfreak

Mitglied
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(); 
    }
}
 
M

MiDniGG

Gast
Da ergebnis eine globale Variable ist kannst Du einfach nach
ergebnis=Masse/(Körpergröße*Körpergröße);
die Methode
auswertung() aufrufen.
 

jgh

Top Contributor
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...
 

musikfreak

Mitglied
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 :(
 

jgh

Top Contributor
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 :D

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

musikfreak

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

musikfreak

Mitglied
sorry war mein Fehler :D 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" :D :) 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";
        }
    }
 
    {
        ;
 
    }
 

nrg

Top Contributor
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??
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B komische NumberFormatException beim DezimalToBinär-Rechner Java Basics - Anfänger-Themen 4
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
Renjiroo Java Bmi Rechner mit Methoden Java Basics - Anfänger-Themen 4
T BMI Rechner fehlerhaft Java Basics - Anfänger-Themen 18
D Primzahlen Rechner nach Eratostenes von Kyrene Algorithmus Java Basics - Anfänger-Themen 2
Animal-Mother BMI Rechner erstellen für W/M Java Basics - Anfänger-Themen 7
Alan6 Java Editor BMI Rechner Java Basics - Anfänger-Themen 7
Nerdinfekt BMI Rechner, fehler beim Zurückgeben des Strings? Java Basics - Anfänger-Themen 2
M Rechner programmieren Java Basics - Anfänger-Themen 3
Z BMI-Rechner Java Basics - Anfänger-Themen 1
F Trinkgeld Rechner und Promillenrechener Hilfe Java Basics - Anfänger-Themen 3
R java.lang.ArrayIndexOutOfBoundsException: 0 Rechner Error Java Basics - Anfänger-Themen 4
S Erste Schritte Java GUI - Rechner erstellen Java Basics - Anfänger-Themen 4
$ Multiplikations-Rechner mit while Schleife Java Basics - Anfänger-Themen 8
J double_Problem im ZinsesZins Rechner Java Basics - Anfänger-Themen 33
K (Taschen)Rechner Java Basics - Anfänger-Themen 8
M Abitur-Noten-Rechner Java Basics - Anfänger-Themen 2
G Welche Java-Version auf meinem Rechner? Java Basics - Anfänger-Themen 2
B Strategy Pattern - Rechner Java Basics - Anfänger-Themen 6
N Einfacher Rechner (für mich nicht so einfach) Java Basics - Anfänger-Themen 5
thet1983 rechner anfaengerfehler? Java Basics - Anfänger-Themen 10
B BMI Rechner Java Basics - Anfänger-Themen 2
H DriveByZero Exception - BMI-Rechner Java Basics - Anfänger-Themen 12
B Co2 rechner hilfe beim programmieren Java Basics - Anfänger-Themen 10
P Bitte um hilfe bei einfachem Rechner Java Basics - Anfänger-Themen 7
B Std-Serialisierung - Speichern/Laden geht nur auf einem Rechner Java Basics - Anfänger-Themen 17
C Rechner Java Basics - Anfänger-Themen 19
B Verbindung zu einen anderen Rechner Java Basics - Anfänger-Themen 2
N Datenaustausch zweier rechner Java Basics - Anfänger-Themen 4
Jats Kosinussatz-Rechner Java Basics - Anfänger-Themen 9
Haave Postfix-Rechner: mehrere math. Operationen nacheinander ausführen Java Basics - Anfänger-Themen 8
C Bmi rechner programmieren Java Basics - Anfänger-Themen 72
B JavaWebStart - Anwendung läuft nur auf einem Rechner Java Basics - Anfänger-Themen 6
P Einfacher Rechner Java Basics - Anfänger-Themen 2
P UPN Rechner Java Basics - Anfänger-Themen 1
F Upn-Rechner Java Basics - Anfänger-Themen 15
B mit Wecker den Rechner aus Standby/Ruhemodus holen Java Basics - Anfänger-Themen 19
R Jar Datei läuft auf neuem Rechner nicht mehr Java Basics - Anfänger-Themen 15
Developer_X Applet auf lokalem Rechner mit der EingabeAufforderung Starten Java Basics - Anfänger-Themen 44
S Was ist falsch an meinem Rechner? Java Basics - Anfänger-Themen 7
M externes Programm auf anderen Rechner ausführen lassen Java Basics - Anfänger-Themen 2
kulturfenster Wie implementiert man einen Rechner in Java? Java Basics - Anfänger-Themen 5
kulturfenster Rechner und ActionListener Java Basics - Anfänger-Themen 11
C DM -> Euro Rechner aber nur mit Operanden des Typs intege Java Basics - Anfänger-Themen 12
G Java Rechner Java Basics - Anfänger-Themen 10
G frage bluej für bmi rechner programmieren Java Basics - Anfänger-Themen 5
T Rechner-Name abfragen Java Basics - Anfänger-Themen 6
C Problem mit dem Rechner Java Basics - Anfänger-Themen 4
G Rechner aus ! Java Basics - Anfänger-Themen 5
M Exel-Rechner in Java ausgeben Java Basics - Anfänger-Themen 13
N Java Rechner Java Basics - Anfänger-Themen 3
D Java Rechner und Einlesen Problem (mit hasNext) Java Basics - Anfänger-Themen 2
W Rechner von quadratzahlen ! fehler Java Basics - Anfänger-Themen 4
P Rechner ^^ Java Basics - Anfänger-Themen 10
K BMI Rechner - wo ist der Fehler? Java Basics - Anfänger-Themen 4
D Rechner programmieren Java Basics - Anfänger-Themen 5
P Mediacenter Userinterface auf langsamem Rechner Java Basics - Anfänger-Themen 5
M Windows Projekt auf Linux Rechner Java Basics - Anfänger-Themen 2
lan2711 Class Dateien auf anderen Rechner zum Laufen kriegen. Java Basics - Anfänger-Themen 5
P Program funktioniert nur bei Rechner die jdk haben Java Basics - Anfänger-Themen 4
rambozola jar-datei von cd auf rechner ohne jvm starten Java Basics - Anfänger-Themen 2
N SSH-Verbindung zu entferntem Rechner aufbauen Java Basics - Anfänger-Themen 5
L Class-Datei auf anderem Rechner Java Basics - Anfänger-Themen 9
H JDK 1.4.2 UND 1.1.8 auf gleichem Rechner Java Basics - Anfänger-Themen 15
X Programmstart auf anderem Rechner... Java Basics - Anfänger-Themen 15
C Java soll Datei auf rechner Finden Java Basics - Anfänger-Themen 2
P parseInt -> "202103122000" -> NumberFormatException Java Basics - Anfänger-Themen 14
C NumberFormatException: null ohne Ausnahmebehandlung stoppen Java Basics - Anfänger-Themen 7
Jascha NullPointerException vs NumberFormatException Java Basics - Anfänger-Themen 5
K Datentypen NumberFormatException Java Basics - Anfänger-Themen 7
Dogge NumberFormatException null Java Basics - Anfänger-Themen 5
O NumberFormatException Java Basics - Anfänger-Themen 2
D NumberFormatException Java Basics - Anfänger-Themen 13
M Compiler-Fehler Fehler Meldung java.lang.NumberFormatException: empty String Java Basics - Anfänger-Themen 2
D Interpreter-Fehler NumberFormatException Textfeld Java Basics - Anfänger-Themen 24
Furtano Variablen NumberFormatException Java Basics - Anfänger-Themen 14
N NumberFormatException, aber wieso? Java Basics - Anfänger-Themen 5
J Problem mit NumberFormatException Java Basics - Anfänger-Themen 6
M NumberFormatException Chat WordPress Java Basics - Anfänger-Themen 13
C NumberFormatException-Problem Java Basics - Anfänger-Themen 6
StupidAttack NumberFormatException Java Basics - Anfänger-Themen 19
M java.lang.NumberFormatException-Problem Java Basics - Anfänger-Themen 6
S NumberFormatException , mit Try/Catch? Java Basics - Anfänger-Themen 7
B NumberFormatException: For input string: "" Java Basics - Anfänger-Themen 4
S NumberFormatException Java Basics - Anfänger-Themen 13
K Fehler Meldung java.lang.NumberFormatException: empty String Java Basics - Anfänger-Themen 1
R Warum NumberFormatException? Java Basics - Anfänger-Themen 4
M Abfangen von java.lang.NumberFormatException Java Basics - Anfänger-Themen 6
J Double.parseDouble(s) wirft keine NumberFormatException Java Basics - Anfänger-Themen 12
G NumberFormatException bei double und long Java Basics - Anfänger-Themen 11
M for-Schleife mit NumberFormatException Java Basics - Anfänger-Themen 15
A NumberFormatException Java Basics - Anfänger-Themen 7
B NumberFormatException Java Basics - Anfänger-Themen 5
F 2 numberformatexception abfangen? Java Basics - Anfänger-Themen 20
S java.lang.NumberFormatException Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben