[ Programa calculo IMC]

5 respostas
U

Olá Galera criei esse programinha para calcular IMC.

Ainda sou meio iniciante e comecei a fazer ciências da computação.

Estou me esforçando para tentar melhorar e daqui um tempo estaria na sessão java avançado, me aguardem!

Favor comentem, segue o código:
/* Calculo IMC
criado por Raphael Santana Carvalho */

import java.util.Scanner; // classe Scanner  
import javax.swing.JOptionPane; // classe JOptionPane

public class Calculo_IMC
{
	public static void main(String args[])
	{
		int sexo, nome_sexo;
		double peso, altura, calcular_IMC;
		double h_imc[] = {20.7, 26.4};
		double m_imc[] = {19.1, 25.8};
		String h_resultado = ("\n\n Abaixo do peso: Menor que 20,7. \n Peso ideal: Maior que 20,7 e Menor que 26,4. \n Acima do peso: 26,4.\n");
		String m_resultado = ("\n\n Abaixo do peso: Menor que 19,1. \n Peso ideal: Maior que 19,1 e Menor que 25,8. \n Acima do peso: 25,8.\n");
		
		String message = ("Bem vindo ao programa para Calcúlo de IMC! \n (Versão 1.0) \n\n Criado por Raphael Santana Carvalho.");
		JOptionPane.showMessageDialog(null, message);

		Scanner input = new Scanner(System.in);

		System.out.print("Qual é o seu sexo: masculino ou feminino? \n Para masculino digite [1]. \n Para feminino digite [2]. \n");		
		sexo = input.nextInt(); // salva na váriavel sexo.
		nome_sexo = sexo;
			
		if (nome_sexo == 1)
		{
			System.out.print("- O seu sexo é: masculino!");
		}

		if (nome_sexo == 2)
		{
			System.out.print("- O seu sexo é: feminino!");
		}

		System.out.print("\n\n Qual é o seu peso [Exemplo: 60,5]?\n");		
		peso = input.nextDouble(); // salva na váriavel peso.
		System.out.printf("- O seu peso é: %6.1f kilogramas!", peso);

		System.out.print("\n\n Qual é a sua altura [Exemplo: 1,70]?\n");		
		altura = input.nextDouble(); // salva na váriavel altura.
		System.out.printf("- A sua altura é: %6.2f metros!", altura);

		calcular_IMC = peso / ((altura)*(altura)); // calcula o valor do IMC

		if (sexo == 1)
		{
			if (calcular_IMC < h_imc[0])
			{
				System.out.print("\n\n Resultado IMC (Masculino):");
				System.out.printf("\n- O seu IMC é: %6.1f. Você está abaixo do peso!", calcular_IMC);
				System.out.print(h_resultado);
			}

			if ((calcular_IMC > h_imc[0]) && (calcular_IMC < h_imc[1]))
			{
				System.out.print("\n\n Resultado IMC (Masculino):");
				System.out.printf("\n- O seu IMC é: %6.1f. Você está no peso ideal!", calcular_IMC);
				System.out.print(h_resultado);
			}

			if (calcular_IMC > h_imc[1])
			{
				System.out.print("\n\n Resultado IMC (Masculino):");
				System.out.printf("\n- O seu IMC é: %6.1f. Você está acima do peso!", calcular_IMC);
				System.out.print(h_resultado);
			}
		}

		if (sexo == 2)
		{
			if (calcular_IMC < m_imc[0])
			{
				System.out.print("\n\n Resultado IMC (Feminino):");
				System.out.printf("\n- O seu IMC é: %6.1f. Você está abaixo do peso!", calcular_IMC);
				System.out.print(m_resultado);
			}

			if ((calcular_IMC > m_imc[0]) && (calcular_IMC < m_imc[1]))	
			{	
				System.out.print("\n\n Resultado IMC (Feminino):");	
				System.out.printf("\n- O seu IMC é: %6.1f. Você está no peso ideal!", calcular_IMC);
				System.out.print(m_resultado);
			}

			if (calcular_IMC > m_imc[1])
			{
				System.out.print("\n\n Resultado IMC (Feminino):");
				System.out.printf("\n- O seu IMC é: %6.1f. Você está acima do peso!", calcular_IMC);
				System.out.print(m_resultado);
			}
		}	
        }
} // fim da classe Calculo_IMC

5 Respostas

d34d_d3v1l

legal seu programa… tem algumas sugestões…

Já que vc está usando JOptionPane, por que não usou ele, ao inves de usar o Scanner? Exemplo:

sexo = Integer.parseInt(JOptionPane.showInputDialog(null,"Qual é o seu sexo: masculino ou feminino? \n Para masculino digite [1]. \n Para feminino digite [2]. \n"));

e o legal de fazer isso, é que você pode até tratar o erro, vamos supor que o cara digite uma letra ou algo do tipo, da pau no programa né? que tal:

try{ sexo = Integer.parseInt(JOptionPane.showInputDialog(null,"Qual é o seu sexo: masculino ou feminino? \n Para masculino digite [1]. \n Para feminino digite [2]. \n")); }catch(NumberFormatException e){ JOptionPane.showMessageDialog(null,"Digite um ou dois !!"); }

ViniGodoy

Algumas coisas podem simplificar o seu programa.

1. Note que as linhas 51, 58 e 65 estão duplicadas. Isso ocorre pq a frase deve ser escrita simplesmente caso sexo == 1.
Evite essa duplicação movendo uma dessas linhas para antes do if da linha 49. O mesmo vale para o resultado, que pode ser colocado após a linha 68.

O mesmo pode ser feito com o sexo feminino.

2. Não há necessidade de criar variáveis diferentes para homens e mulheres, já que seu programa só calcula um resultado de cada vez. Pergunte o sexo primeiro e, baseado nesse resultado, inicialize o vetor imc[], e faça os cálculos. Isso evitará um grande número de linhas duplicadas (você poderá fazer 1 if só, para homens e mulheres).

3. Jamais use um método que não o nextLine() para ler do console. Caso contrário, você pode ter problemas

4. Declare variáveis onde forem usadas, não no início do método.

5. Evite usar o \n. Ele não é multiplataforma. O %n do printf é. E o usual é deixa-lo ao final da linha, não no início.

Eis o código com essas correções:

/** Calculo IMC
@author Raphael Santana Carvalho 
@author ViniGodoy
*/

import java.util.Scanner;
import javax.swing.JOptionPane;

public class Calculo_IMC
{
	public static void main(String args[])
	{
		String message = ("Bem vindo ao programa para Calcúlo de IMC! \n (Versão 1.1) \n\n Criado por Raphael Santana Carvalho.");
		JOptionPane.showMessageDialog(null, message);
		
		Scanner input = new Scanner(System.in);
		System.out.println("Qual é o seu sexo: masculino ou feminino? \n Para masculino digite [1]. \n Para feminino digite [2]. \n");		
		int sexo = Integer.parseInt(input.nextLine()); // salva na váriavel sexo.
			
		if (sexo == 1)
		{
			System.out.println("- O seu sexo é: masculino!");
		}
		else if (sexo == 2)
		{
			System.out.println("- O seu sexo é: feminino!");
		}

		System.out.println();
		System.out.println("Qual é o seu peso [Exemplo: 60,5]?");
		
		double peso = Double.parseDouble(input.nextLine()); // salva na váriavel peso.
		System.out.printf("- O seu peso é: %6.1f kilogramas!%n", peso);

		System.out.println();
		System.out.println("Qual é a sua altura [Exemplo: 1,70]?");
		
		double altura = Double.parseDouble(input.nextLine()); // salva na váriavel altura.
		System.out.printf("- A sua altura é: %6.2f metros!%n%n", altura);

		double resultado_imc = peso / ((altura)*(altura)); // calcula o valor do IMC
		double imc[] = new double[2];
		
		
		if (sexo == 1)
		{
		   System.out.println("Resultado IMC (Masculino):");		   
		   imc[0] = 20.7; imc[1] = 26.4;
		}
		else
		{
		   System.out.println("Resultado IMC (Feminino):");
		   imc[0] = 19.1; imc[1] = 25.8;
		}
      
		if (resultado_imc < imc[0])
		{
			System.out.printf("- O seu IMC é: %6.1f. Você está abaixo do peso!", resultado_imc);
		}
		else if ((resultado_imc >= imc[0]) && (resultado_imc < imc[1]))
		{
			System.out.printf("- O seu IMC é: %6.1f. Você está no peso ideal!", resultado_imc);
		}
		else if (resultado_imc >= imc[1])
		{
			System.out.printf("- O seu IMC é: %6.1f. Você está acima do peso!", resultado_imc);
		}
		
		System.out.println();
		System.out.println();
		System.out.printf("Abaixo do peso: Menor que %1$.1f.%nPeso ideal: Maior que %1$.1f e menor que %2$.1f.%nAcima do peso: Maior que %2$.1f", imc[0], imc[1]);
	}	
} // fim da classe Calculo_IMC
U

Terminei ele em modo gráfico, ViniGodoy você ajudou muito. obrigado!

/* Calculo IMC
@author Raphael Santana Carvalho 
@credits ViniGodoy 
*/

import javax.swing.JOptionPane; // classe JOptionPane

public class CalculoIMC_Grafico
{
	public static void main(String args[])
	{		
				
		String message = ("Bem vindo ao programa para Calcúlo de IMC! \n (Versão 1.2) \n\n Criado por Raphael Santana Carvalho.");
		JOptionPane.showMessageDialog(null, message);

   		int sexo = Integer.parseInt(JOptionPane.showInputDialog(null, "Qual é o seu sexo: masculino ou feminino? \n Para masculino digite [1]. \n Para feminino digite [2]."));  
			
		if (sexo == 1)
		{
			JOptionPane.showMessageDialog(null, "- O seu sexo é: masculino!");
		}

		else if (sexo == 2)
		{
			JOptionPane.showMessageDialog(null, "- O seu sexo é: feminino!");
		}

		JOptionPane.showMessageDialog(null, "- Observação:\n Ao digitar os dados \"peso\" e \"altura\", \nsempre use o ponto(.) ao invês da vírgula(,).");

		double peso = Double.parseDouble(JOptionPane.showInputDialog(null, "Qual é o seu peso [Exemplo: 60.5]?"));		
		JOptionPane.showMessageDialog(null, "- O seu peso é: " + peso + " kilogramas!");		

		double altura = Double.parseDouble(JOptionPane.showInputDialog(null, "Qual é a sua altura [Exemplo: 1.70]?"));
		JOptionPane.showMessageDialog(null, "- A sua altura é: " + altura + " metros!");

		double calcular_IMC = peso / ((altura)*(altura)); // calcula o valor do IMC
		double imc[] = new double[2];

		if (sexo == 1)
		{
			JOptionPane.showMessageDialog(null, "Resultado IMC (Masculino):");
			imc[0] = 20.7; imc[1] = 26.4;  
		}
		else if (sexo == 2)
		{
			JOptionPane.showMessageDialog(null, "Resultado IMC (Feminino):");
			imc[0] = 19.1; imc[1] = 25.8; 
		}

		String resultado = ("Abaixo do peso: Menor que " + imc[0] + ".\nPeso ideal: Maior que " + imc[0] + " e menor que " + imc[1] + ".\nAcima do peso: Maior que " + imc[1] + " ");

		if (calcular_IMC < imc[0])
		{
			JOptionPane.showMessageDialog(null, "- O seu IMC é: " + calcular_IMC + "\n Você está abaixo do peso!\n\n" + resultado);
		}

		if ((calcular_IMC >= imc[0]) && (calcular_IMC < imc[1]))
		{
			JOptionPane.showMessageDialog(null, "- O seu IMC é: " + calcular_IMC + "\n Você está no peso ideal!\n\n" + resultado);
		}

		if (calcular_IMC >= imc[1])
		{
			JOptionPane.showMessageDialog(null, "- O seu IMC é: " + calcular_IMC + "\n Você está acima do peso!\n\n" + resultado);
		}		
	}		

 } // fim da classe CalculoIMC_Grafico
ViniGodoy

Use elses nos ifs para evitar teste de condições excludentes.
Eles evitam que o computador fique comparando coisas de maneira redundante, o que é processamento inútil.

Veja, se o IMC é < imc[0], ele obviamente não se enquadrará nos outros casos.

Evitar processamento inútil torna o programa mais rápido. Obviamente pro seu programa não vai fazer a menor diferença, pois ele é muito pequeno e esse processamento ocorre uma vez só. Mas é bom não criar o mau hábito. :slight_smile:

U

Arrumei o código, algumas prevenções de erros, aos pouquinho vou melhorando!

/* Calculo IMC
@author Raphael Santana Carvalho 
*/

import javax.swing.JOptionPane; // classe JOptionPane

public class CalculoIMC_Grafico
{
	public static void main(String args[])
	{		
			
		String message = ("Bem vindo ao programa para Calcúlo de IMC! \n (Versão 1.3) \n\n Criado por Raphael Santana Carvalho.");
		JOptionPane.showMessageDialog(null, message);
		
		int sexo = 0;

		while (sexo != 2 && sexo != 1)
		{
		sexo = Integer.parseInt(JOptionPane.showInputDialog(null, "Qual é o seu sexo: masculino ou feminino? \n Para masculino digite [1]. \n Para feminino digite [2]."));  
		switch(sexo)
		{
 		case 1: JOptionPane.showMessageDialog(null, "- O seu sexo é: Masculino.");
   		break;
   		case 2: JOptionPane.showMessageDialog(null, "- O seu sexo é: Feminino.");;
  		break;
   		default: JOptionPane.showMessageDialog(null, "Favor digite apenas os números 1 ou 2.");;
		}
		}
				
		JOptionPane.showMessageDialog(null, "- Observação:\n Ao digitar os dados \"peso\" e \"altura\", \nsempre use o ponto(.) ao invês da vírgula(,).");

		double peso = Double.parseDouble(JOptionPane.showInputDialog(null, "Qual é o seu peso [Exemplo: 60.5]?"));		
		JOptionPane.showMessageDialog(null, "- O seu peso é: " + peso + " kilogramas!");		

		double altura = Double.parseDouble(JOptionPane.showInputDialog(null, "Qual é a sua altura [Exemplo: 1.70]?"));
		JOptionPane.showMessageDialog(null, "- A sua altura é: " + altura + " metros!");

		double calcular_IMC = peso / ((altura)*(altura)); // calcula o valor do IMC
		double imc[] = new double[2];

		if (sexo == 1)
		{
			JOptionPane.showMessageDialog(null, "Resultado IMC (Masculino):");
			imc[0] = 20.7; imc[1] = 26.4;  
		}
		else if (sexo == 2)
		{
			JOptionPane.showMessageDialog(null, "Resultado IMC (Feminino):");
			imc[0] = 19.1; imc[1] = 25.8; 
		}

		String resultado = ("Abaixo do peso: Menor que " + imc[0] + ".\nPeso ideal: Maior que " + imc[0] + " e menor que " + imc[1] + ".\nAcima do peso: Maior que " + imc[1] + " ");

		if (calcular_IMC < imc[0])
		{
			JOptionPane.showMessageDialog(null, "- O seu IMC é: " + calcular_IMC + "\n Você está abaixo do peso!\n\n" + resultado);
		}

		else if ((calcular_IMC >= imc[0]) && (calcular_IMC < imc[1]))
		{
			JOptionPane.showMessageDialog(null, "- O seu IMC é: " + calcular_IMC + "\n Você está no peso ideal!\n\n" + resultado);
		}

		else if (calcular_IMC >= imc[1])
		{
			JOptionPane.showMessageDialog(null, "- O seu IMC é: " + calcular_IMC + "\n Você está acima do peso!\n\n" + resultado);
		}		
	}		

 } // fim da classe CalculoIMC_Grafico
Criado 5 de fevereiro de 2011
Ultima resposta 6 de fev. de 2011
Respostas 5
Participantes 3