[ Programa calculo IMC]

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:

[code]/* 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
[/code]

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 !!"); }

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.

  1. 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).

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

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

  4. 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:

[code]/** 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
[/code]

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

[code]
/* 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[/code]

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:

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