2013-03-26, 22:48
  #1
Medlem
Försöker få min JLabel, vars referens heter svar, att ändra text när jag matar in fel värde och ett undantag kastas av typen NumberFormatException. Men av någon anledning ändras texten bara hela tiden till från "Ditt BMI-värde är: " till "Ditt BMI-värde är: NaN". Varför?

bmi, vikt och längd är double's som är deklarerade i den omringande klassen (utanför konstruktorn). weight och length är JTextField's som är deklarerade på samma ställen som bmi, vikt och längd.



class Lyssnare implements ActionListener
{
public void actionPerformed(ActionEvent ave)
{
try
{
längd = Double.parseDouble(length.getText());
}
catch(NumberFormatException e)
{
svar.setText("Felaktig längd-inmatning!");
}
try
{
vikt = Double.parseDouble(weight.getText());
}
catch(NumberFormatException e)
{
svar.setText("Felaktig längd-inmatning!");
}

bmi = vikt/(längd*längd);
svar.setText("Ditt BMI-värde är: " + bmi);


}
}
Citera
2013-03-26, 23:04
  #2
Moderator
Protons avatar
Citat:
Ursprungligen postat av Janejja
Försöker få min JLabel, vars referens heter svar, att ändra text när jag matar in fel värde och ett undantag kastas av typen NumberFormatException. Men av någon anledning ändras texten bara hela tiden till från "Ditt BMI-värde är: " till "Ditt BMI-värde är: NaN". Varför?

bmi, vikt och längd är double's som är deklarerade i den omringande klassen (utanför konstruktorn). weight och length är JTextField's som är deklarerade på samma ställen som bmi, vikt och längd.



class Lyssnare implements ActionListener
{
public void actionPerformed(ActionEvent ave)
{
try
{
längd = Double.parseDouble(length.getText());
}
catch(NumberFormatException e)
{
svar.setText("Felaktig längd-inmatning!");
}
try
{
vikt = Double.parseDouble(weight.getText());
}
catch(NumberFormatException e)
{
svar.setText("Felaktig längd-inmatning!");
}

bmi = vikt/(längd*längd);
svar.setText("Ditt BMI-värde är: " + bmi);


}
}
NaN = Not a number, det får du av floatar som inte kan användas som floatar. Nånting säger mig att du får in konstiga värden i antingen din längd eller viktvariabel och att resultatet av din division blir NaN sedan.

För övrigt ska du använda CODE eller PHP-taggarna när du postar kod.
Citera
2013-03-26, 23:23
  #3
Medlem
Citat:
Ursprungligen postat av Proton
NaN = Not a number, det får du av floatar som inte kan användas som floatar. Nånting säger mig att du får in konstiga värden i antingen din längd eller viktvariabel och att resultatet av din division blir NaN sedan.

För övrigt ska du använda CODE eller PHP-taggarna när du postar kod.

Tack
Citera
2013-03-27, 20:53
  #4
Medlem
frellis avatar
Nja, ditt problem är inte att du får inte dålig data i sig. Ditt problem är att du ändrar texten på din label efter dina felkontroller. Så även om du får in felaktig data och ditt numberFormatException fångas och din label då ändrar text till "Felaktig längd-inmatning!" så kommer den efter det att försöka sätta ett värde på BMI ändå. Och efter det så kommer den att ändra texten på din label till "Ditt BMI-värde är: " + bmi.

Det du måste göra är att lägga in själva textändrandet i din try-catch. Förslagsvis lägger du också både din vikt- och längd-parsing i samma try-block också. Tror det blir enklare då.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in