Calculadora IMC com AWT

6 respostas
Maycon_Ricardo

Pessoal estou tentando fazer uma calculadora IMC usando os recursos básicos do AWT,é o seguinte tenho que mostrar numeros de vexes que ela foi usado,para cada resultado guardar em uma lista e depois que eu apertar exibir mostrar o 1- peso -altura e sua classe(magro,obeso,etc).A principio esta dando erro na conversão de txt para double...quem puder me ajudar fico grato.

package br.faetec.imc.inicio;

import java.awt.*;

/**
 *
 * @author Maycon
 */
public class IMC extends Frame {

    Panel container;
    Button botão1, botão2, botão3;
    TextField txt1, txt2, txt3;
    Label Label1, Label2, Label3,Label;
    List lista;

    public IMC() {

        setLayout(new BorderLayout());
        container = new Panel();

        botão1 = new Button("Calcular");
        botão2 = new Button("Exibir");
        botão3 = new Button("Sair");

        txt1 = new TextField(5);
        txt2 = new TextField(20);
        txt3 = new TextField(20);

        Label = new Label("Calculando I.M.C. ");
        Label1 = new Label("Quantidade");
        Label2 = new Label("Peso");
        Label3 = new Label("Altura");

        lista = new List(5);

        setTitle("Calcular I.M.C.");
        reshape(500, 100, 180, 350); //tamanho da tela 
        add("Center", container);
        container.add(Label);
        container.add(Label1);
        container.add(txt1);

        container.add(Label2);
        container.add(txt2);

        container.add(Label3);
        container.add(txt3);

        container.add(botão1);
        container.add(botão2);

        container.add(lista, BorderLayout.CENTER);

        container.add(botão3);

        show();
    }

    public boolean action(Event evt, Object componente) {
            
        double peso = Double.parseDouble(txt2.getText());
        double altura = Double.parseDouble(txt1.getText());
        double result = peso / (altura * altura);
        String grau = null;


        if (componente.equals("Exit")) {
            System.exit(0);

        }

        if (componente.equals("Calcular")) {
            
            grau = verIMC(result);

        }

        if (componente.equals("exibir")) {

            lista.setName( "" + peso + "" + altura + "é" + grau);



        }
        return true;
    }

    public String verIMC(double result) {
        String grau = null;

        for (int p = 0; p <= 10; p++) {

            txt1.setText("" + p);
            if (result < 18.5) {
                grau = "magro";
            }
            if (18.5 < result & result < 24.9) {
                grau = "saudavel";
            }
            if (25 < result & result < 29.9) {
                grau = "sobrepeso";
            }
            if (30 < result & result < 34.9) {
                grau = "obesidade Um";
            }
            if (35 < result & result < 39) {
                grau = "obesidade dois";
            }
            if (40 <= result) {
                grau = "obesidade tres";
            }

        }
        return grau;
    }

    public static void main(String[] args) {
        new IMC();
    }

        
}

6 Respostas

samuk1

Cara Primeira coisa edita ai e coloca Formatação Code! Pq senão ninguem vai ficar pedendo tempo lendo algo sem formatação!

Maycon_Ricardo

Desculpa!Ja arrumei valew pelo toque

samuk1

Ta primeiro Corrija os Seguintes erros:

double altura = Double.parseDouble(txt1.getText()); 
\\Txt 1 não é quantidade? Então Seria :
double altura = Double.parseDouble(txt3.getText());
if (componente.equals("Exit")) {  
\\"Exit" não existe né... Cuidado com Ctrl+C Ctrl+V...
if (componente.equals("Sair")) 

if (componente.equals("exibir")) {  
\\ exibir ´ta minusculo
if (componente.equals("Exibir")) {  

{

Corrija Estes e veja se o Problema COntinua...

Maycon_Ricardo
Cara obrigado !Muita falta de atenção mesmo.Bom não esta funcionando ainda esta dando esse erro
run:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2
	at br.faetec.imc.inicio.IMC.action(IMC.java:87)
	at java.awt.Component.handleEvent(Component.java:6534)
	at java.awt.Window.postEvent(Window.java:2487)
	at java.awt.Component.postEvent(Component.java:4957)
	at java.awt.Component.postEvent(Component.java:4957)
	at java.awt.Component.dispatchEventImpl(Component.java:4667)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)

Tive que alterar:

import java.awt.*;

/**
 *
 * @author Maycon
 */
public class IMC extends Frame {

    Panel container;
    Button botão1, botão2, botão3;
    TextField txt1, txt2, txt3;
    Label Label1, Label2, Label3, Label;
    List lista;

    public IMC() {

        setLayout(new BorderLayout());
        container = new Panel();

        botão1 = new Button("Calcular");
        botão2 = new Button("Exibir");
        botão3 = new Button("Sair");

        txt1 = new TextField(5);
        txt2 = new TextField(20);
        txt3 = new TextField(20);

        Label = new Label("Calculando I.M.C. ");
        Label1 = new Label("Quantidade pessoas");
        Label2 = new Label("Peso");
        Label3 = new Label("Altura");

        lista = new List(5);

        setTitle("Calcular I.M.C.");
        reshape(500, 100, 230, 350); //tamanho da tela 
        add("Center", container);
        container.add(Label);
        container.add(Label1);
        container.add(txt1);

        container.add(Label2);
        container.add(txt2);

        container.add(Label3);
        container.add(txt3);

        container.add(botão1);
        container.add(botão2);

        container.add(lista, BorderLayout.CENTER);

        container.add(botão3);

        show();
    }

    public boolean action(Event evt, Object componente) {
        if (componente.equals("Sair")) {
            System.exit(0);
        }

        if (componente.equals("Calcular")) {
            double peso;
            double altura;

            int r = Integer.parseInt(txt1.getText());

            for (int p = 0; p <= r; p++) {


                double[] result = new double[r];
                String[] grau = new String[r];


                peso = Double.parseDouble(txt2.getText());
                altura = Double.parseDouble(txt3.getText());
                result[p] = peso / (altura * altura);

                grau[p] = verIMC(result[p]);

                if (componente.equals("Exibir")) {
                    for (p = 0; p <= 10; p++) {
                        lista.setName("" + p + peso + "" + altura + "é" + grau[p]);
                    }
                }
            }
        }
        return true;
    }

    public String verIMC(double par) {

        String grau;

        if (par < 18.5) {
            grau = "magro";
            return grau;
        }
        if (18.5 < par & par < 24.9) {
            grau = "saudavel";
            return grau;
        }
        if (25 < par & par < 29.9) {
            grau = "sobrepeso";
            return grau;
        }
        if (30 < par & par < 34.9) {
            grau = "obesidade Um";
            return grau;
        }
        if (35 < par & par < 39) {
            grau = "obesidade dois";
            return grau;
        }
        if (40 <= par) {
            grau = "obesidade tres";
            return grau;


        }
        return "";
    }

    public static void main(String[] args) {
        new IMC();
    }
}
samuk1

:smiley:
Seu Array recebe a quantidade de Pessoas.

int r = Integer.parseInt(txt1.getText());

Mas o Array sempre começa do zero.

Dai :

//substitua isso :
for (int p = 0; p <= r; p++) {
//por isso:
for (int p = 0; p < r; p++) {

Poque se vc colocar p<=r ele vai tentar criar 1 array a mais do que ele Suporta.

Maycon_Ricardo

Cara Valew pela atenção consegui dar uns ajustes e tah belezinha!Obrigado pela atenção!Wlew

Criado 26 de agosto de 2012
Ultima resposta 31 de ago. de 2012
Respostas 6
Participantes 2