[RESOLVIDO] Ajuda em código do Java

olá pessoal do GUJ , preciso da ajuda de voces nesse código , o objetivo desse código é mostrar o peso ideal da pessoa fazendo a equação que no meu caso não funciona(formula: peso - altura * altura)


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package calculamediaimc;

/**
 *
 * @author Fabio
 */
public class Calculamediaimc {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        new JFrameMedia();
    }
}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package calculamediaimc;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

/**
 *
 * @author Fabio
 */
class Controlador implements ActionListener {
    private JFrame view;
    private JButton btCalcular;
    private Double resultado; 
    private String situacao;

    public Controlador(JFrame view) {
        this.view = view;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(view instanceof JFrameMedia) {
            
        
        JFrameMedia jfMedia = (JFrameMedia) view;
        if(e.getSource() == jfMedia.getBtCalcular())
        {
            resultado = Double.valueOf(jfMedia.getPeso()) / Double.valueOf(jfMedia.getAltura()) * Double.valueOf(jfMedia.getAltura());
             if(resultado <= 30) {
             situacao = "Abaixo do Peso";                 
             }
             else {
             situacao = "Acima do Peso";
             } 
                 
            JOptionPane.showMessageDialog(null,"IMC: " + resultado +"\n Situação: "+ situacao,"Janela",JOptionPane.INFORMATION_MESSAGE);
            
            
            }
    }
    }
    
    
    }
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package calculamediaimc;

import javax.swing.*;
import java.awt.GridLayout;
import java.awt.BorderLayout;

/**
 *
 * @author Fabio
 */
public class JFrameMedia extends JFrame {

    private JLabel lblPeso;
    private JLabel lblAltura;
    //private JLabel lblNota3;
    private JTextField txtPeso;
    private JTextField txtAltura;
    //private JTextField txtNota3;
    private JPanel jPanelCampos;
    private JPanel jPanelBotoes;
    private JButton btCalcular;

    public JFrameMedia() {
        initializate();
        setSize(200, 140);
        setVisible(true);
        setResizable(true);

    }

    private void initializate() {
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("Calculadora de Média");
        this.setLayout(new BorderLayout());
        this.add(getPanelCampos(), BorderLayout.NORTH);
        this.add(getPanelBotoes(), BorderLayout.CENTER);
    }

    private JPanel getPanelCampos() {
        if (jPanelCampos == null) {
            jPanelCampos = new JPanel(new GridLayout(3, 2));
            lblPeso = new JLabel("Digite Peso: ");
            txtPeso = new JTextField(2);
            lblAltura = new JLabel("Digite Altura: ");
            txtAltura = new JTextField(2);
            //lblNota3 = new JLabel("Digite Nota3: ");
            //txtNota3 = new JTextField(2);
           jPanelCampos.add(lblPeso);
           jPanelCampos.add(txtPeso);
           jPanelCampos.add(lblAltura);
           jPanelCampos.add(txtAltura);
           //jPanelCampos.add(lblNota3);
           //jPanelCampos.add(txtNota3);
        }
        return jPanelCampos;
    }

    private JPanel getPanelBotoes() {
        if (jPanelBotoes == null) {
            jPanelBotoes = new JPanel(new GridLayout(1, 1));
            btCalcular = new JButton("Calcular");
            btCalcular.addActionListener(new Controlador(this));
            jPanelBotoes.add(btCalcular);
        }
        return jPanelBotoes;

    }
    
    public String getPeso() {
        return txtPeso.getText();
    }
    public String getAltura(){
        return txtAltura.getText();
    }
    //public String getNota3(){
       //return txtNota3.getText();
        //}
    public JButton getBtCalcular(){
        return btCalcular;
    }
}

Está dando erro? Qual a mensagem?

Abraço e boa sorte!

Faz assim:
Assim: (peso) / (altura * altura)

Ou seja:

resultado = (Double.valueOf(jfMedia.getPeso()))  / (Double.valueOf(jfMedia.getAltura()) * Double.valueOf(jfMedia.getAltura()));

Abraços.

Fica com DEUS.

Bom Dia …
Eu não sei porque o seu não funciona, mas escrevi um código que calcula o IMC. Dá uma olhada:

package imc;

import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class CalculaIMC extends JFrame {
	private JButton btCalcular, btLimpar;
	private JLabel lbAltura, lbPeso;
	private JTextField txtAltura, txtPeso;
	
	public CalculaIMC() {
		super("Cálculo de IMC");
		setLayout(new GridLayout(3, 2));
		
		lbAltura = addLabel("Altura");
		add(lbAltura);
		
		txtAltura = new JTextField();
		add(txtAltura);
		
		lbPeso = addLabel("Peso");
		add(lbPeso);
		
		txtPeso = new JTextField();
		add(txtPeso);
		
		btCalcular = new JButton("Calcular");
		btCalcular.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Double imc = calcularIMC();
				exibirMensagem(imc);
			}
		});
		add(btCalcular);
		
		btLimpar = new JButton("Limpar");
		btLimpar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				clear();
			}
		});
		
		add(btLimpar);
		
		setSize(150, 200);
		setVisible(true);
	}
	
	private void exibirMensagem(Double valor) {
		if (valor < 18.5) {
			JOptionPane.showMessageDialog(this, "Abaixo do Peso");
		}else if (valor >= 18.5 && valor < 24.9) {
			JOptionPane.showMessageDialog(this, "Saudável");
		}else if (valor >= 25 && valor < 29.9) {
			JOptionPane.showMessageDialog(this, "Acima do Peso");
		}else if (valor >= 30 && valor < 34.9) {
			JOptionPane.showMessageDialog(this, "Obesidade Grau I");
		}else if (valor >= 35 && valor < 39.9) {
			JOptionPane.showMessageDialog(this, "Obesidade Grau II");
		}else {
			JOptionPane.showMessageDialog(this, "Obesidade Grau III");
		}
		clear();
	}
	
	private Double calcularIMC() {
		Double peso = Double.valueOf(txtPeso.getText()); 
		Double altura = Double.valueOf(txtAltura.getText());
		Double resultado = peso / (altura * altura);
		return resultado;
	}
	
	private void clear() {
		txtAltura.setText("");
		txtPeso.setText("");
		txtAltura.requestFocus();
	}
	
	private JLabel addLabel(String titulo) {
		JLabel temp = new JLabel(titulo);
		temp.setForeground(Color.BLACK);
		temp.setFont(new Font("Courier New", Font.BOLD, 14));
		return temp;
	}
}

Classe de Inicialização:

package imc;

public class AppInit {
	public static void main(String[] args) {
		new CalculaIMC();
	}
}

Altere como desejar … usei classe anônima como tratador de eventos, acho melhor que ficar usando e.getSource().
Outra alteração foi o uso de variáveis somente no escopo de função, uma vez que a informação necessária é a mensagem, não os valores.

Espero que ajude. Abraços!

[quote=DarklorD]Bom Dia …
Eu não sei porque o seu não funciona, mas escrevi um código que calcula o IMC. Dá uma olhada:

package imc;

import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class CalculaIMC extends JFrame {
	private JButton btCalcular, btLimpar;
	private JLabel lbAltura, lbPeso;
	private JTextField txtAltura, txtPeso;
	
	public CalculaIMC() {
		super("Cálculo de IMC");
		setLayout(new GridLayout(3, 2));
		
		lbAltura = addLabel("Altura");
		add(lbAltura);
		
		txtAltura = new JTextField();
		add(txtAltura);
		
		lbPeso = addLabel("Peso");
		add(lbPeso);
		
		txtPeso = new JTextField();
		add(txtPeso);
		
		btCalcular = new JButton("Calcular");
		btCalcular.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Double imc = calcularIMC();
				exibirMensagem(imc);
			}
		});
		add(btCalcular);
		
		btLimpar = new JButton("Limpar");
		btLimpar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				clear();
			}
		});
		
		add(btLimpar);
		
		setSize(150, 200);
		setVisible(true);
	}
	
	private void exibirMensagem(Double valor) {
		if (valor < 18.5) {
			JOptionPane.showMessageDialog(this, "Abaixo do Peso");
		}else if (valor >= 18.5 && valor < 24.9) {
			JOptionPane.showMessageDialog(this, "Saudável");
		}else if (valor >= 25 && valor < 29.9) {
			JOptionPane.showMessageDialog(this, "Acima do Peso");
		}else if (valor >= 30 && valor < 34.9) {
			JOptionPane.showMessageDialog(this, "Obesidade Grau I");
		}else if (valor >= 35 && valor < 39.9) {
			JOptionPane.showMessageDialog(this, "Obesidade Grau II");
		}else {
			JOptionPane.showMessageDialog(this, "Obesidade Grau III");
		}
		clear();
	}
	
	private Double calcularIMC() {
		Double peso = Double.valueOf(txtPeso.getText()); 
		Double altura = Double.valueOf(txtAltura.getText());
		Double resultado = peso / (altura * altura);
		return resultado;
	}
	
	private void clear() {
		txtAltura.setText("");
		txtPeso.setText("");
		txtAltura.requestFocus();
	}
	
	private JLabel addLabel(String titulo) {
		JLabel temp = new JLabel(titulo);
		temp.setForeground(Color.BLACK);
		temp.setFont(new Font("Courier New", Font.BOLD, 14));
		return temp;
	}
}

Classe de Inicialização:

package imc;

public class AppInit {
	public static void main(String[] args) {
		new CalculaIMC();
	}
}

Altere como desejar … usei classe anônima como tratador de eventos, acho melhor que ficar usando e.getSource().
Outra alteração foi o uso de variáveis somente no escopo de função, uma vez que a informação necessária é a mensagem, não os valores.

Espero que ajude. Abraços![/quote]

O seu funciona pq vc está utilizando de modo correto, veja:

Double resultado = peso / (altura * altura);

Ele estava fazendo direto:

resultado = Double.valueOf(jfMedia.getPeso()) / Double.valueOf(jfMedia.getAltura()) * Double.valueOf(jfMedia.getAltura()); 

ou seja assim:

peso / altura * altura;

Abraços.

Fica com DEUS.

Muito obrigado a atenção de vocês