Problema na primeira execução

2 respostas
S

Boas, estou com um problema e já andei ás voltas mas não consigo descobrir o que causa esse problema. É o seguinte: Eu criei um programa com uma interface gráfica que pede ao utilizador para escolher o seu sexo, introduzir a idade, altura e peso. Após o utilizador introduzir os dados ele carrega no botão calcular. O botão “calcular”, quando clicado, gera um método que atribui os valores da idade, altura etc… a outras variáveis que irão ser utilizadas numa fórmula. Quando o sexo é masculino, um conjunto de valores é atribuido a variáveis, e quando é feminino outros valores são atribuídos ás mesmas variáveis.

Até aqui tudo bem, o programa recebe a informação, captura os dados necessários para elaborar a fórmula e retornar o resultado. Mas não sei porque raio ás vezes ele mostra valores completamente descabidos, por exemplo: “-infinity” e “0.0”. São 3 fórmulas e quase sempre na primeira execução do programa dois resultados estão sempre mal, apenas um está sempre correcto e no entanto a fórmula está implementada da mesma forma. Isto acontece só na primeira execução do programa depois de X tempo. Deverei usar threads? uma vez que ele faz 3 fórmulas ao mesmo tempo…mas ele só retorna o valor depois de feitas as contas…não percebo.

2 Respostas

J

O caso do infinity é que você deve estar tentando dividir um número por 0 e o 0.0 deve ser um problema da fórmula. Verifique se você não está utilizando a variável antes de atribuir um valor, ou declarando duas variáveis com o mesmo nome.Posta a parte do cálculo pra gente ver o que pode ser.
Valeu!

S

Mas o caso da divisão por zero não deveria gerar uma excepção? Eu dúvido que o problema seja da fórmula porque ele só erra uma vez, abro o programa e ás vezes dá-me esses valores e continuam a dar até que eu reabra o programa. O que me intriga é que o erro ocorre raramente, não consigo perceber porquê…

//Ficheiro calcular.java

public class calcular {
//Peso ideal

public static void calcular() {

float altura = (Float.parseFloat(gui.txaltura.getText()));
float idade = (Float.parseFloat(gui.txidade.getText()));
float altura2 = (Float.parseFloat(gui.txaltura.getText())*0.01f);
float peso = (Float.parseFloat(gui.txpeso.getText()));


float a = altura;
float i = idade;
float p = peso;
float a2 = altura2;

gui.pesoid = (float) (a - 100.0f - ((a -150.0f) / gui.f1) + ((i-20.0f) /4.0f ));
System.out.println(gui.pesoid);

//IMC

gui.imc = (float) ( (p) / (a2*a2) );
System.out.println(gui.imc);

//Neb

gui.neb = (gui.f2 + (gui.f3*p) + (gui.f4*a) - (gui.f5*i));
System.out.println(gui.neb);
}
}

//Ficheiro gui (main) -> Incompleto

public class gui {

public static float f1 = 0.0f;
public static float f2 = 0.0f;
public static float f3 = 0.0f;
public static float f4 = 0.0f;
public static float f5 = 0.0f;
public static float pesoid = 0.0f; // Peso ideal
public static float imc = 0.0f; // Indice de massa corporal
public static float neb = 0.0f; // Necessidades energeticas basais

....

public static void main(String args[]) {

MouseListener m1 = new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
f1 = 4.0f; // Para o homem
f2 = 66.0f;
f3 = 13.7f;
f4 = 5.0f;
f5 = 6.8f;
 }
};

m.addMouseListener(m1);

MouseListener m2 = new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
f1 = 2.0f; // Para Mulher
f2 = 665.0f;
f3 = 9.5f;
f4 = 1.8f;
f5 = 4.7f;
 }
};

f.addMouseListener(m2);

MouseListener m3 = new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
calcular.calcular();
 }
};

calc.addMouseListener(m3);

javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { mostrar(); } });

}
}
Criado 19 de fevereiro de 2007
Ultima resposta 20 de fev. de 2007
Respostas 2
Participantes 2