2 Duvidas Básicas! [Resolvido!]

Olá Estou com 2 duvidas bem básicas a 1° é sobre logica não estou conseguindo fazer algo muito simples.

como faço esse programinha: Ler dois números e verificar qual é o menor e qual é o maior eu fiz isso:


import java.util.Scanner;

public class Numero {
	public static void main (String[] args){
	
		Scanner ler = new Scanner(System.in);
		
		int num1;
		int num2;
		
		System.out.println("Digite um numero");
		num1 = ler.nextInt();

		System.out.println("Digite outro numero");
		num2 = ler.nextInt();
		
		if (num1 > num2) {
			System.out.print(num1 + "\b O primeiro numero e o maior");
		} else if (num2 < num1){
			System.out.print(num2 + "\b O segundo Numero e menor");
		}
		
		if (num1 > num2) {
			System.out.print(num1 + "\b O primeiro numero e o mair");
		} else if (num2 > num1){
			System.out.print(num2 + "\b O segundo Numero e mair");
		}
			
	}
}

A segunda duvida é o seguinte não consigo fazer conta como: “82,3” “1,76”, ou seja, contas que contem virgula ou ponto no caso é uma calculadora que traz o IMC

[code] import javax.swing.JOptionPane;

public class Calc {

public static void main (String[] args){

    String peso = JOptionPane.showInputDialog("Qual o seu peso em QuiloGrama?");
	String altura = JOptionPane.showInputDialog("Qual a sua altura?");
	
	double pesoEmQuilogramas = Double.parseDouble(peso);
	double alturaEmMetros = Double.parseDouble(altura);
	
	double imc = pesoEmQuilogramas / (alturaEmMetros * alturaEmMetros);
	 
	 if (imc < 20){
		JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "Voce esta abaixo do peso");
		} else if ((imc >= 20) && (imc <= 25)) {
			JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "Voce esta no peso ideal");
				} else if ((imc > 25) && (imc >= 30)){
				JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "Voce esta com sobrepeso");
					} else if ((imc >= 30) && (imc <=35)){ 
					JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "voce esta com Obesidade Moderada");
						} else if ((imc > 35) && (imc >= 40)){
						JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "voce esta com obesidade severa");
							} else if ((imc >40) && (imc >=50)){
							JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "Voce esta com obesidade Morbida");
								} else if(imc > 50){
									JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "Super Obesidade");
								}		

}
}

[/code]

Espero Ajuda vlws

Lógica básica

se e somente se

num1 > num 2

concluímos que
num1 é maior que num2 e
num2 é menor que num1

caso contrario

num1 é menor que num2 e
num2 é maior que num1

flagra?

sua comparação pode ficar assim daí:

if (num1 == num2) {
    sys..... numero iguais
} else {
  if (num1 < num2) {
     num1 é menor que num2
     e num2 é maior que num1
  } else {
     num1 é maior que num2
     e num2 é menor que num1
  }

}

[quote=Gabs-JV]Olá Estou com 2 duvidas bem básicas a 1° é sobre logica não estou conseguindo fazer algo muito simples.

como faço esse programinha: Ler dois números e verificar qual é o menor e qual é o maior eu fiz isso:


import java.util.Scanner;

public class Numero {
	public static void main (String[] args){
	
		Scanner ler = new Scanner(System.in);
		
		int num1;
		int num2;
		
		System.out.println("Digite um numero");
		num1 = ler.nextInt();

		System.out.println("Digite outro numero");
		num2 = ler.nextInt();
		
		if (num1 > num2) {
			System.out.print(num1 + "\b O primeiro numero e o maior");
		} else if (num2 < num1){
			System.out.print(num2 + "\b O segundo Numero e menor");
		}
		
		if (num1 > num2) {
			System.out.print(num1 + "\b O primeiro numero e o mair");
		} else if (num2 > num1){
			System.out.print(num2 + "\b O segundo Numero e mair");
		}
			
	}
}

A segunda duvida é o seguinte não consigo fazer conta como: “82,3” “1,76”, ou seja, contas que contem virgula ou ponto no caso é uma calculadora que traz o IMC

[code] import javax.swing.JOptionPane;

public class Calc {

public static void main (String[] args){

    String peso = JOptionPane.showInputDialog("Qual o seu peso em QuiloGrama?");
	String altura = JOptionPane.showInputDialog("Qual a sua altura?");
	
	double pesoEmQuilogramas = Double.parseDouble(peso);
	double alturaEmMetros = Double.parseDouble(altura);
	
	double imc = pesoEmQuilogramas / (alturaEmMetros * alturaEmMetros);
	 
	 if (imc < 20){
		JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "Voce esta abaixo do peso");
		} else if ((imc >= 20) && (imc <= 25)) {
			JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "Voce esta no peso ideal");
				} else if ((imc > 25) && (imc >= 30)){
				JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "Voce esta com sobrepeso");
					} else if ((imc >= 30) && (imc <=35)){ 
					JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "voce esta com Obesidade Moderada");
						} else if ((imc > 35) && (imc >= 40)){
						JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "voce esta com obesidade severa");
							} else if ((imc >40) && (imc >=50)){
							JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "Voce esta com obesidade Morbida");
								} else if(imc > 50){
									JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "Super Obesidade");
								}		

}
}

[/code]

Espero Ajuda vlws[/quote]

então… quanto ao primeiro vc não precisa fazer duas vezes… mas é essa lógica mesmo, você não precisa fazer duas vezes a comparação e possivelmente verificar se são iguais (um ultimo else bastaria, se não é maior nem menor então é igual…).

quanto ao segundo, acredito que seu programa esteja “considerando-se” americano, portanto para ele virgula é separador de milhares, milhões…etc, para separar a parte inteira da fracionária você usa ponto (ou muda o locale… no seu caso é mais facil digitar o ponto mesmo…).

AEEE consegui resolver a 1° ficou assim:


import java.util.Scanner;

public class Numero {
	public static void main (String[] args){
	
		Scanner ler = new Scanner(System.in);
		
		int num1;
		int num2;
		
		System.out.println("Digite um numero");
		num1 = ler.nextInt();

		System.out.println("Digite outro numero");
		num2 = ler.nextInt();
		
		if(num1 == num2){
			System.out.println("Numeros Iguais");
		} else if (num1 > num2){
		System.out.println(num1 + " Numero 1 e maior que numero 2");
		System.out.println(num2 + " e menor que num 1");
	    } else if (num1 < num2){
		System.out.println(num1 + " Numero 1 e menor que numero 2");
		System.out.println(num2 + " Numero 2 e Maior que o Numero 1 ");
		}	
	}
}

Obrigado ai mano :smiley: :smiley:

Bom maior_abandonado, eu testei com virgula e ponto, mas nenhum funciona apresenta o seguinte erro:

[i]Exception in thread “main” java.lang.NumberFormatException: 6,4"

at sun.misc.FloatingDecimal.readjavaFormatString

at java.lang.DOuble.ParseDouble

At Calc.mainCalc.java:10
[/i]

[quote=maior_abandonado][quote=Gabs-JV]Olá Estou com 2 duvidas bem básicas a 1° é sobre logica não estou conseguindo fazer algo muito simples.

como faço esse programinha: Ler dois números e verificar qual é o menor e qual é o maior eu fiz isso:


import java.util.Scanner;

public class Numero {
	public static void main (String[] args){
	
		Scanner ler = new Scanner(System.in);
		
		int num1;
		int num2;
		
		System.out.println("Digite um numero");
		num1 = ler.nextInt();

		System.out.println("Digite outro numero");
		num2 = ler.nextInt();
		
		if (num1 > num2) {
			System.out.print(num1 + "\b O primeiro numero e o maior");
		} else if (num2 < num1){
			System.out.print(num2 + "\b O segundo Numero e menor");
		}
		
		if (num1 > num2) {
			System.out.print(num1 + "\b O primeiro numero e o mair");
		} else if (num2 > num1){
			System.out.print(num2 + "\b O segundo Numero e mair");
		}
			
	}
}

A segunda duvida é o seguinte não consigo fazer conta como: “82,3” “1,76”, ou seja, contas que contem virgula ou ponto no caso é uma calculadora que traz o IMC

[code] import javax.swing.JOptionPane;

public class Calc {

public static void main (String[] args){

    String peso = JOptionPane.showInputDialog("Qual o seu peso em QuiloGrama?");
	String altura = JOptionPane.showInputDialog("Qual a sua altura?");
	
	double pesoEmQuilogramas = Double.parseDouble(peso);
	double alturaEmMetros = Double.parseDouble(altura);
	
	double imc = pesoEmQuilogramas / (alturaEmMetros * alturaEmMetros);
	 
	 if (imc < 20){
		JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "Voce esta abaixo do peso");
		} else if ((imc >= 20) && (imc <= 25)) {
			JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "Voce esta no peso ideal");
				} else if ((imc > 25) && (imc >= 30)){
				JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "Voce esta com sobrepeso");
					} else if ((imc >= 30) && (imc <=35)){ 
					JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "voce esta com Obesidade Moderada");
						} else if ((imc > 35) && (imc >= 40)){
						JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "voce esta com obesidade severa");
							} else if ((imc >40) && (imc >=50)){
							JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "Voce esta com obesidade Morbida");
								} else if(imc > 50){
									JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "Super Obesidade");
								}		

}
}

[/code]

Espero Ajuda vlws[/quote]

então… quanto ao primeiro vc não precisa fazer duas vezes… mas é essa lógica mesmo, você não precisa fazer duas vezes a comparação e possivelmente verificar se são iguais (um ultimo else bastaria, se não é maior nem menor então é igual…).

quanto ao segundo, acredito que seu programa esteja “considerando-se” americano, portanto para ele virgula é separador de milhares, milhões…etc, para separar a parte inteira da fracionária você usa ponto (ou muda o locale… no seu caso é mais facil digitar o ponto mesmo…). [/quote]

Bom maior_abandonado, eu testei com virgula e ponto, mas nenhum funciona apresenta o seguinte erro:

Exception in thread “main” java.lang.NumberFormatException: 6,4"

at sun.misc.FloatingDecimal.readjavaFormatString

at java.lang.DOuble.ParseDouble

At Calc.mainCalc.java:10

tem como eu apagar a msg emcima? sou novato

Amigo, veja que no seu código do imc, alguns comparadores dentro dos ifs estão errados, você deve corrigi-los. E como dito anteriormente, use o ponto em vez da vírgula para casas decimais.

se entendi, é pq ta vindo um bucado de numero? ao inves de 2 numeros? …
se for isso, é pq vc tá usando o operador de concactenação, é claro que se a variavel concatenada for double, vai mostrar um bucado de numero msm
ao inves de fazer isso:

if (imc < 20){ JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "Voce esta abaixo do peso"); // imprimiria um bucado de numero } else if ((imc >= 20) && (imc <= 25)) {
só substitui por isso:

if (imc < 20){ String teste = String.format("O seu Imc = %2.f voce esta abaixo do peso",imc); JOptionPane.showMessageDialog(null,teste); } else if ((imc >= 20) && (imc <= 25)) {
axo que é isso… pelo que eu lembro o showMessageDialog não aceita formatação.
nos estudos recomendo usar System.out.print ao inves de JOptionPane.showMessageDialog, mais vc vai descobrir na hr certa…

Se o que você quer pe permitir que o usuário digite “.” ou “,” na hora de entrar com os valores pode fazer um “replace” , e permitir que ambos os valores sejam permitidos. Considere depois tratar as “exceptions”, que podem ser “lançadas”, já que o usuário pode digitar uma String e não um número, bem, segue abaixo o código alterado, com as mudanças para aceitar, valores com ponto ou vírgula.

[code]import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.util.Locale;
import javax.swing.JOptionPane;

public class Calc {
enum msg {MSG_QUAL_SEU_PESO("Qual o seu peso em QuiloGrama?"),
MSG_QUAL_SUA_ALTURA("Qual a sua altura?");
msg(String vMsg){
this.vMsg = vMsg;
}
String vMsg;
};

public static String msgEntrePeso(){
	return JOptionPane.showInputDialog(null, msg.MSG_QUAL_SEU_PESO.vMsg);
}
public static String msgEntreAltura(){
	return JOptionPane.showInputDialog(null, msg.MSG_QUAL_SUA_ALTURA.vMsg);
}

public static void mostraImc( String msg, double imc){
	NumberFormat nf = NumberFormat.getInstance(new Locale(&quot;pt&quot;,&quot;BR&quot;));
	nf.setMaximumFractionDigits(2);
	JOptionPane.showMessageDialog(null, msg+&quot; &quot;+ nf.format(imc));
}
public static double calculaImc(double...args){
	return args[0]/(args[1]*args[1]);
}

public static void main(String[] args) {

	String peso = msgEntrePeso();
	String altura = msgEntreAltura();

	DecimalFormatSymbols dsf = new DecimalFormatSymbols(new Locale(&quot;pt&quot;,&quot;BR&quot;));
	double pesoEmQuilogramas = Double.parseDouble(peso.replace(dsf.getDecimalSeparator(), '.'));
	double alturaEmMetros = Double.parseDouble(altura.replace(dsf.getDecimalSeparator(), '.'));

	double imc = calculaImc(pesoEmQuilogramas,alturaEmMetros);

	if (imc &lt; 20) {
		mostraImc(&quot;Você está abaixo do peso, O seu Imc = &quot;,imc);
	} else if ((imc &gt;= 20) && (imc &lt;= 25)) {
		mostraImc(&quot;Você está no peso ideal, O seu Imc = &quot;,imc);
	} else if ((imc &gt; 25) && (imc &gt;= 30)) {
		mostraImc(&quot;Você está com sobrepeso, O seu Imc = &quot;,imc);
	} else if ((imc &gt;= 30) && (imc &lt;= 35)) {
		mostraImc(&quot;Você está com Obesidade Moderada, O seu Imc = &quot;,imc);
	} else if ((imc &gt; 35) && (imc &gt;= 40)) {
		mostraImc(&quot;Você está com obesidade severa, O seu Imc = &quot;,imc);
	} else if ((imc &gt; 40) && (imc &gt;= 50)) {
		mostraImc(&quot;Você está com obesidade Morbida, O seu Imc = &quot;,imc);
	} else if (imc &gt; 50) {
		mostraImc(&quot;Você está com super Obesidade, O seu Imc = &quot;,imc);
	}
}

}
[/code]

[quote=CoderMaster]se entendi, é pq ta vindo um bucado de numero? ao inves de 2 numeros? …
se for isso, é pq vc tá usando o operador de concactenação, é claro que se a variavel concatenada for double, vai mostrar um bucado de numero msm
ao inves de fazer isso:

if (imc < 20){ JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + "Voce esta abaixo do peso"); // imprimiria um bucado de numero } else if ((imc >= 20) && (imc <= 25)) {
só substitui por isso:

if (imc < 20){ String teste = String.format("O seu Imc = %2.f voce esta abaixo do peso",imc); JOptionPane.showMessageDialog(null,teste); } else if ((imc >= 20) && (imc <= 25)) {
axo que é isso… pelo que eu lembro o showMessageDialog não aceita formatação.
nos estudos recomendo usar System.out.print ao inves de JOptionPane.showMessageDialog, mais vc vai descobrir na hr certa…[/quote]

Cara, nao funcionou…

o codigo ficou assim


import javax.swing.JOptionPane;

public class Calcu {

	public static void main (String[] args){

	    String peso = JOptionPane.showInputDialog("Qual o seu peso em QuiloGrama?");
		String altura = JOptionPane.showInputDialog("Qual a sua altura?");
		
		double pesoEmQuilogramas = Double.parseDouble(peso);
		double alturaEmMetros = Double.parseDouble(altura);
		
		double imc = pesoEmQuilogramas / (alturaEmMetros * alturaEmMetros);
		 
		 if (imc < 20){
		String teste = String.format("O seu Imc = %2.f voce esta abaixo do peso",imc); 
		JOptionPane.showMessageDialog(null,teste);
		} else if ((imc >= 20) && (imc <= 25)) {
		String teste = String.format("O seu Imc = %2.f Voce esta no peso ideal",imc); 
		JOptionPane.showMessageDialog(null,teste);
		} else if ((imc > 25) && (imc >= 30)){
		String teste = String.format("O seu Imc = %2.f Voce esta com sobrepeso",imc);
		JOptionPane.showMessageDialog(null,teste);
		} else if ((imc >= 30) && (imc <=35)){
        String teste = String.format("O seu Imc = %2.f voce esta com Obesidade Moderada",imc);		
		JOptionPane.showMessageDialog(null,teste);
		} else if ((imc > 35) && (imc >= 40)){
		String teste = String.format("O seu Imc = %2.f voce esta com obesidade severa",imc);
		JOptionPane.showMessageDialog(null,teste);
		} else if ((imc >40) && (imc >=50)){
		String teste = String.format("O seu Imc = %2.f Voce esta com obesidade Morbida",imc);
		JOptionPane.showMessageDialog(null,teste);
		} else if(imc > 50){
		String teste = String.format("O seu Imc = %2.f Super Obesidade",imc);
		JOptionPane.showMessageDialog(null,teste);
	  }		
   }
}

[quote=ribclauport]Se o que você quer pe permitir que o usuário digite “.” ou “,” na hora de entrar com os valores pode fazer um “replace” , e permitir que ambos os valores sejam permitidos. Considere depois tratar as “exceptions”, que podem ser “lançadas”, já que o usuário pode digitar uma String e não um número, bem, segue abaixo o código alterado, com as mudanças para aceitar, valores com ponto ou vírgula.

[code]import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.util.Locale;
import javax.swing.JOptionPane;

public class Calc {
enum msg {MSG_QUAL_SEU_PESO("Qual o seu peso em QuiloGrama?"),
MSG_QUAL_SUA_ALTURA("Qual a sua altura?");
msg(String vMsg){
this.vMsg = vMsg;
}
String vMsg;
};

public static String msgEntrePeso(){
	return JOptionPane.showInputDialog(null, msg.MSG_QUAL_SEU_PESO.vMsg);
}
public static String msgEntreAltura(){
	return JOptionPane.showInputDialog(null, msg.MSG_QUAL_SUA_ALTURA.vMsg);
}

public static void mostraImc( String msg, double imc){
	NumberFormat nf = NumberFormat.getInstance(new Locale(&quot;pt&quot;,&quot;BR&quot;));
	nf.setMaximumFractionDigits(2);
	JOptionPane.showMessageDialog(null, msg+&quot; &quot;+ nf.format(imc));
}
public static double calculaImc(double...args){
	return args[0]/(args[1]*args[1]);
}

public static void main(String[] args) {

	String peso = msgEntrePeso();
	String altura = msgEntreAltura();

	DecimalFormatSymbols dsf = new DecimalFormatSymbols(new Locale(&quot;pt&quot;,&quot;BR&quot;));
	double pesoEmQuilogramas = Double.parseDouble(peso.replace(dsf.getDecimalSeparator(), '.'));
	double alturaEmMetros = Double.parseDouble(altura.replace(dsf.getDecimalSeparator(), '.'));

	double imc = calculaImc(pesoEmQuilogramas,alturaEmMetros);

	if (imc &lt; 20) {
		mostraImc(&quot;Você está abaixo do peso, O seu Imc = &quot;,imc);
	} else if ((imc &gt;= 20) && (imc &lt;= 25)) {
		mostraImc(&quot;Você está no peso ideal, O seu Imc = &quot;,imc);
	} else if ((imc &gt; 25) && (imc &gt;= 30)) {
		mostraImc(&quot;Você está com sobrepeso, O seu Imc = &quot;,imc);
	} else if ((imc &gt;= 30) && (imc &lt;= 35)) {
		mostraImc(&quot;Você está com Obesidade Moderada, O seu Imc = &quot;,imc);
	} else if ((imc &gt; 35) && (imc &gt;= 40)) {
		mostraImc(&quot;Você está com obesidade severa, O seu Imc = &quot;,imc);
	} else if ((imc &gt; 40) && (imc &gt;= 50)) {
		mostraImc(&quot;Você está com obesidade Morbida, O seu Imc = &quot;,imc);
	} else if (imc &gt; 50) {
		mostraImc(&quot;Você está com super Obesidade, O seu Imc = &quot;,imc);
	}
}

}
[/code][/quote]

cara testei o seu codigo e mostrou vários erros e outra, o seu codigo esta muito avançado, muita coisa ai não entendo, mas vlw pela ajuda

Áh sim, desculpe… é que coloquei %2.f sendo %.2f, faça isso e ta ok…

cara,

tenta fazer isso:

double pesoEmQuilogramas = Double.parseDouble(peso.replace(",", ".")); double alturaEmMetros = Double.parseDouble(altura.replace(",", "."));

como o maior_abandonado falou antes, o double aceita números com .(ponto) ao invés de ,(virgula)
e a string que vc está recuperando tem uma virgula ao invés de um ponto para separar as casas decimais, vc pode alterar isso através do locale, ou simplesmente dando um replace qdo houver virgulas como fiz no codigo acima.

Outra coisa, suas faixas de comparação estão meio erradas, revise elas, tem uns maior igual ( >= ) onde deveria ser o contrário.

Cara Deu certo, Obrigago. Agora você poderia me falar aonde eu estava errando e como chama esse “tema” que fala sobre isso no caso “%2.f” para que eu possa estudar sobre isso ou ler alguma coisa… obrigado

[quote=Guilherme Tsubauchi]cara,

tenta fazer isso:

double pesoEmQuilogramas = Double.parseDouble(peso.replace(",", ".")); double alturaEmMetros = Double.parseDouble(altura.replace(",", "."));

como o maior_abandonado falou antes, o double aceita números com .(ponto) ao invés de ,(virgula)
e a string que vc está recuperando tem uma virgula ao invés de um ponto para separar as casas decimais, vc pode alterar isso através do locale, ou simplesmente dando um replace qdo houver virgulas como fiz no codigo acima.

Outra coisa, suas faixas de comparação estão meio erradas, revise elas, tem uns maior igual ( >= ) onde deveria ser o contrário.[/quote]

Cara eu fiz isso e não deu certo… Eu fiz o que o CoderMaster falou e deu certo, mas voce poderia me falar algo para eu ler sobre “replace” e “locale” e queria continuar tentando essa maneira que você falou para resolver esse probleminha é sempre bom aprender…

Você tem razão tava tudo errado as comparações, arrumei ficou assim tanto as condiçoes como o codigo com o replace


import javax.swing.JOptionPane;

public class Calc {

	public static void main (String[] args){

	    String peso = JOptionPane.showInputDialog("Qual o seu peso em QuiloGrama?");
		String altura = JOptionPane.showInputDialog("Qual a sua altura?");
		
		
		double pesoEmQuilogramas = Double.parseDouble(peso.replace(",", ".")); 
		double alturaEmMetros = Double.parseDouble(altura.replace(",", "."));    
		
		double imc = pesoEmQuilogramas / (alturaEmMetros * alturaEmMetros);
		 
		 if (imc < 20){
		JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + " Voce esta abaixo do peso");
		} else if ((imc >= 20) && (imc <= 25)) {
		JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + " Voce esta no peso ideal");
		} else if ((imc > 25) && (imc <= 30)){
		JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + " Voce esta com sobrepeso");
		} else if ((imc > 30) && (imc <= 35)){ 
		JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + " voce esta com Obesidade Moderada");
		} else if ((imc > 35) && (imc <= 40)){
		JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + " voce esta com obesidade severa");
		} else if ((imc > 40) && (imc <=50)){
		JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + " Voce esta com obesidade Morbida");
		} else if(imc > 50){
		JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + " Super Obesidade");
		}		
 }
}

[quote=Gabs-JV][quote=Guilherme Tsubauchi]cara,

tenta fazer isso:

double pesoEmQuilogramas = Double.parseDouble(peso.replace(",", ".")); double alturaEmMetros = Double.parseDouble(altura.replace(",", "."));

como o maior_abandonado falou antes, o double aceita números com .(ponto) ao invés de ,(virgula)
e a string que vc está recuperando tem uma virgula ao invés de um ponto para separar as casas decimais, vc pode alterar isso através do locale, ou simplesmente dando um replace qdo houver virgulas como fiz no codigo acima.

Outra coisa, suas faixas de comparação estão meio erradas, revise elas, tem uns maior igual ( >= ) onde deveria ser o contrário.[/quote]

Cara eu fiz isso e não deu certo… Eu fiz o que o CoderMaster falou e deu certo, mas voce poderia me falar algo para eu ler sobre “replace” e “locale” e queria continuar tentando essa maneira que você falou para resolver esse probleminha é sempre bom aprender…

Você tem razão tava tudo errado as comparações, arrumei ficou assim tanto as condiçoes como o codigo com o replace

[code]

import javax.swing.JOptionPane;

public class Calc {

public static void main (String[] args){

    String peso = JOptionPane.showInputDialog("Qual o seu peso em QuiloGrama?");
	String altura = JOptionPane.showInputDialog("Qual a sua altura?");
	
	
	double pesoEmQuilogramas = Double.parseDouble(peso.replace(",", ".")); 
	double alturaEmMetros = Double.parseDouble(altura.replace(",", "."));    
	
	double imc = pesoEmQuilogramas / (alturaEmMetros * alturaEmMetros);
	 
	 if (imc < 20){
	JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + " Voce esta abaixo do peso");
	} else if ((imc >= 20) && (imc <= 25)) {
	JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + " Voce esta no peso ideal");
	} else if ((imc >= 25) && (imc <= 30)){
	JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + " Voce esta com sobrepeso");
	} else if ((imc > 30) && (imc <= 35)){ 
	JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + " voce esta com Obesidade Moderada");
	} else if ((imc > 35) && (imc <= 40)){
	JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + " voce esta com obesidade severa");
	} else if ((imc > 40) && (imc <=50)){
	JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + " Voce esta com obesidade Morbida");
	} else if(imc > 50){
	JOptionPane.showMessageDialog(null,"O seu Imc = " + imc + " Super Obesidade");
	}		

}
}

[/code] [/quote]

ja que você está demonstrando que está se esforçando eu vo pega esse código, ver o erro que está dando e ja volto com a correção… mas não se acostuma… rs

cara eu executei esse código e funcionou normalmente…

eu triei os replaces de virgula por ponto e ai funcionou se eu informar os valores com ponto ja… (só não se esquece de informar ambos os valores com virgula se vicê tiver dado o replace em ambos ou ambos com ponto se você não tiver dado o replace em nenhum…).

[quote=maior_abandonado]cara eu executei esse código e funcionou normalmente…

eu triei os replaces de virgula por ponto e ai funcionou se eu informar os valores com ponto ja… (só não se esquece de informar ambos os valores com virgula se vicê tiver dado o replace em ambos ou ambos com ponto se você não tiver dado o replace em nenhum…).[/quote]

ae deu certo, agora eu entendi o problema… como o Guilherme Tsubauchi falou as condições estavam errada… então o programa lia as variaveis e não encontrava uma saida, agora que arrumei ele encontra… e outra… eu colocava no peso 70.5 e na altura 1,76 ou seja, estava colocando . em peso e , em altura.

Mas vlw ae… obrigado pela ajuda.

A assinatura do metodo replace é esta:

 public String replace(char oldChar, char newChar)

No java doc do método está escrito:

[quote]Returns a new string resulting from replacing all occurrences of
*oldCha in this string with newChar.[/quote]

traduzindo

[quote]Retorna uma nova string resultante da substituição de todas as ocorrências do
caracter antigo nessa seqüência com o novo carácter[/quote]

peso.replace(&quot;,&quot;, &quot;.&quot;)// troque todos os caracteres antigos(as virgulas), por pontos, e me retorne uma nova string!

O locale é usado para obter informações relevantes a respeito moedas, fuso horários, era, entre outras coisas(Internacionalização). O default do locale é sempre o que está setado no seu "SO", veja o fonte do método getDefault.

public static Locale getDefault() { // do not synchronize this method - see 4071298 // it's OK if more than one default locale happens to be created if (defaultLocale == null) { String language, region, country, variant; language = (String) AccessController.doPrivileged( new GetPropertyAction(&quot;user.language&quot;, &quot; en &quot; )); // for compatibility, check for old user.region property region = (String) AccessController.doPrivileged( new GetPropertyAction(&quot;user.region&quot; )); if (region != null) { // region can be of form country, country_variant, or _variant int i = region.indexOf('_'); if (i &gt;= 0) { country = region.substring(0, i); variant = region.substring(i + 1); } else { country = region; variant = &quot;&quot;; } } else { country = (String) AccessController.doPrivileged( new GetPropertyAction(&quot;user.country&quot;, &quot; &quot; )); variant = (String) AccessController.doPrivileged( new GetPropertyAction(&quot;user.variant&quot;, &quot; &quot; )); } defaultLocale = getInstance(language, country, variant); } return defaultLocale;

No final da história, somente foi usado o Locale, para coneniência, para estar usando os simbolos de decimal usados no Brasil, porém acredito que a maior importância(livro Katy Sierra Guia de estudos para progamador java 6), é mesmo o seu uso nas classes NumberFormat e DateFormat, a fim de providenciar meios para "internacionalização", desta forma suas saídas vão se adaptar em relação a um determinado local.
O código que postei, pelo menos aqui, não estava com erros em relação a formatação, mas de qualquer forma se o problema foi resolvido é o que importa.

[quote=ribclauport]A assinatura do metodo replace é esta:

 public String replace(char oldChar, char newChar)

No java doc do método está escrito:

[quote]Returns a new string resulting from replacing all occurrences of
*oldCha in this string with newChar.[/quote]

traduzindo

[quote]Retorna uma nova string resultante da substituição de todas as ocorrências do
caracter antigo nessa seqüência com o novo carácter[/quote]

peso.replace(&quot;,&quot;, &quot;.&quot;)// troque todos os caracteres antigos(as virgulas), por pontos, e me retorne uma nova string!

O locale é usado para obter informações relevantes a respeito moedas, fuso horários, era, entre outras coisas(Internacionalização). O default do locale é sempre o que está setado no seu "SO", veja o fonte do método getDefault.

public static Locale getDefault() { // do not synchronize this method - see 4071298 // it's OK if more than one default locale happens to be created if (defaultLocale == null) { String language, region, country, variant; language = (String) AccessController.doPrivileged( new GetPropertyAction(&quot;user.language&quot;, &quot; en &quot; )); // for compatibility, check for old user.region property region = (String) AccessController.doPrivileged( new GetPropertyAction(&quot;user.region&quot; )); if (region != null) { // region can be of form country, country_variant, or _variant int i = region.indexOf('_'); if (i &gt;= 0) { country = region.substring(0, i); variant = region.substring(i + 1); } else { country = region; variant = &quot;&quot;; } } else { country = (String) AccessController.doPrivileged( new GetPropertyAction(&quot;user.country&quot;, &quot; &quot; )); variant = (String) AccessController.doPrivileged( new GetPropertyAction(&quot;user.variant&quot;, &quot; &quot; )); } defaultLocale = getInstance(language, country, variant); } return defaultLocale;

No final da história, somente foi usado o Locale, para coneniência, para estar usando os simbolos de decimal usados no Brasil, porém acredito que a maior importância(livro Katy Sierra Guia de estudos para progamador java 6), é mesmo o seu uso nas classes NumberFormat e DateFormat, a fim de providenciar meios para "internacionalização", desta forma suas saídas vão se adaptar em relação a um determinado local.
O código que postei, pelo menos aqui, não estava com erros em relação a formatação, mas de qualquer forma se o problema foi resolvido é o que importa.

[/quote]

Obrigado já consigo ter uma noção sobre replace, ou seja, ele troca virgulas, pontos, aspas pela formatação que eu escolher…

e o Locate troca as informaçoes padrões do java pela informações do nosso sistema no nosso caso o Brasil vlw ae