oi pessoal, estou tentando fazer um conversor que pergunta ao usuario o valor a ser convertido e as unidades (tipos) que eles deseja (Celsius, Farhenhait ou Kelvin) mas só retorna 0.
alem do mais, os do…while nao estão funcionando como deveriam.
olhem o codigo e por favor deem-me uma solução…
valeeeeu!
//perguntar enquanto a resposta não for c ou f ou kdo{System.out.println("Digite o tipo desse valorPassado (c,f,k)");//pergunta o tipo inicial do valorPassadode=sc.next();}while((de!="c")||(de!="f")||(de!="k"));//perguntar enquanto a resposta não for c ou f ou kdo{System.out.println("Digite para que tipo deseja converter (c,f,k)");//pergunta o tipo final do valorPassadopara=sc.next();}while((para!="c")||(para!="f")||(para!="k"));return"";
}
doubleresultado(){//calcula até o usuário digitar n ou Ndo{if(perguntas()==“c”){if(para==“f”){resultado=((valorPassado*1.8)+32);}elseif(para==“k”){resultado=((valorPassado)+273);}else{resultado=(valorPassado);}}
elseif(de=="f"){if(para=="c"){resultado=(((valorPassado)-32)/1.8);}elseif(para=="k"){resultado=(((valorPassado)+459.67)/1.8);}else{resultado=valorPassado;}}elseif(de=="k"){if(para=="c"){resultado=((valorPassado)-273);}elseif(para=="f"){resultado=(((valorPassado)*1.8)-459.67);}else{resultado=(valorPassado);}}System.out.println(resultado);System.out.println("Deseja fazer outra conversão?(s/n)");repete=sc.next();}while(repete.toLowerCase().equals("s"));return-1;
Post seu código entre as tags [code ] e [/code ], para melhor visualização e podermos ajudar.
dsystem
Olá Maiara tudo bem???
Estive olhando seu código e encontrei alguns erros.
Em primeiro lugar, para você fazer comparação de String, não se utiliza "==" e sim "equals". No seu while os operadores estão como "|| " que significa ou, quando na verdade tem que ser "&&" e.
Fiz algumas mudanças mas vê se consegue entender
publicclassdoWhile{publicstaticvoiddoWhile(){Scannersc=newScanner(System.in);Stringde,para;doublevalor;doubleresultado=0;System.out.println("Digite o valorPassado que deseja converter");valor=sc.nextDouble();do{System.out.println("Digite o tipo desse valorPassado (c,f,k)");de=sc.nextLine();}while(!de.toLowerCase().equals("c")&&!de.toLowerCase().equals("k")&&!de.toLowerCase().equals("f"));do{System.out.println("Digite para que tipo deseja converter (c,f,k)");para=sc.nextLine();para.toLowerCase();}while(!para.toLowerCase().equals("c")&&!para.toLowerCase().equals("k")&&!para.toLowerCase().equals("f"));if(de.equals("c")){if(para.equals("f")){resultado=((valor*1.8)+32);}elseif(para.equals("k")){resultado=((valor)+273);}else{resultado=valor;}}elseif(de.equals("c")){if(para.equals("f")){resultado=((valor*1.8)+32);}elseif(para.equals("k")){resultado=((valor)+273);}else{resultado=valor;}}System.out.println("Resultado da conversão "+resultado);}publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);doWhile();System.out.println("Deseja fazer nova consulta?");Stringsim=sc.nextLine();while(sim.toLowerCase().equals("s")){doWhile();System.out.println("Deseja fazer nova consulta?");sim=sc.nextLine();}System.out.println("Tchau!!");}}
Qq coisa pergunta!
Bjs!
A
andredecotia
qual é a lógica do programa?
ViniGodoy
A menos que você queira ter problemas, use apenas o método nextLine() para ler do console. O nextInt() e o nextDouble() podem dar dores de cabeça sérias.
dsystem
Já aproveitando, olá ViniGodoy,
Pq o nextInt() e nextDouble() podem dar dores de cabeça???
=]
ViniGodoy
Olá.
Todos os comandos do console são terminados por \n (ou \r\n). É um padrão.
O nextLine() é o único que procura pelo terminador de quebra de linha. Os demais, são usados em arquivos binários, por exemplo, onde você quer procurar só pelo double e pelo int, sem um terminador.
O que pode acontecer então? Uma leitura diferente de nextLine() pode não esvarizar o buffer do System.in, e deixar o \n lá. E só na próxima leitura esse \n ser processado. Se for um nextLine() pode ocorrer dele não ler nada. Se for um nextInt(), por exemplo, pode ocorrer dele não aceitar mais entrada nenhuma.
obrigada dsystem, mudei para equals e &&. porem o seu programa compila mas contianu dando resultado apena 0.
é assim que é pra colocar entre code?
importjava.util.*;classConversor{Scannersc=newScanner(System.in);doublevalorPassado;doubleresultado=0;Stringde,para,repete;Stringperguntas(){System.out.println("Digite o valorPassado que deseja converter: ");//pergunta ao usuário o valorPassado que deseja converter valorPassado=sc.nextDouble();//perguntar enquanto a resposta não for c ou f ou k do{System.out.println("Digite o tipo desse valorPassado (c,f,k)");//pergunta o tipo inicial do valorPassado de=sc.next();}while((de!="c")||(de!="f")||(de!="k"));//perguntar enquanto a resposta não for c ou f ou k do{System.out.println("Digite para que tipo deseja converter (c,f,k)");//pergunta o tipo final do valorPassado para=sc.next();}while((para!="c")||(para!="f")||(para!="k"));return"";}doubleresultado(){//calcula até o usuário digitar n ou N do{if(perguntas()=="c"){if(para=="f"){resultado=((valorPassado*1.8)+32);}elseif(para=="k"){resultado=((valorPassado)+273);}else{resultado=(valorPassado);}}elseif(de=="f"){if(para=="c"){resultado=(((valorPassado)-32)/1.8);}elseif(para=="k"){resultado=(((valorPassado)+459.67)/1.8);}else{resultado=valorPassado;}}elseif(de=="k"){if(para=="c"){resultado=((valorPassado)-273);}elseif(para=="f"){resultado=(((valorPassado)*1.8)-459.67);}else{resultado=(valorPassado);}}System.out.println(resultado);System.out.println("Deseja fazer outra conversão?(s/n)");repete=sc.next();}while(repete.toLowerCase().equals("s"));return-1;}publicstaticvoidmain(String[]args){Conversorc=newConversor();System.out.println(c.perguntas());System.out.println(c.resultado());}}
dsystem
Oi Maiara,
Executei na minha maquina e foi certinho.
Como você está fazendo???
Posta o código aqui para eu verificar, por favor!!
M
Maiara
importjava.util.*;publicclassConversor{publicstaticvoidConversor(){Scannersc=newScanner(System.in);Stringde,para;doublevalor;doubleresultado=0;System.out.println("Digite o valorPassado que deseja converter");valor=sc.nextDouble();do{System.out.println("Digite o tipo desse valorPassado (c,f,k)");de=sc.nextLine();}while(!de.toLowerCase().equals("c")&&!de.toLowerCase().equals("k")&&!de.toLowerCase().equals("f"));do{System.out.println("Digite para que tipo deseja converter (c,f,k)");para=sc.nextLine();para.toLowerCase();}while(!para.toLowerCase().equals("c")&&!para.toLowerCase().equals("k")&&!para.toLowerCase().equals("f"));if(de.equals("c")){if(para.equals("f")){resultado=((valor*1.8)+32);}elseif(para.equals("k")){resultado=((valor)+273);}else{resultado=valor;}}elseif(de.equals("c")){if(para.equals("f")){resultado=((valor*1.8)+32);}elseif(para.equals("k")){resultado=((valor)+273);}else{resultado=valor;}}System.out.println("Resultado da conversão "+resultado);}publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);Conversor();System.out.println("Deseja fazer nova consulta?");Stringsim=sc.nextLine();while(sim.toLowerCase().equals("s")){Conversor();System.out.println("Deseja fazer nova consulta?");sim=sc.nextLine();}System.out.println("Tchau!!");}}
dsystem
Maiara, alguma coisa voce está fazendo errado .
Acabei de fazer um teste e foi certo
Faz o seguinte, me passa os dados que você está passando para console.
valor = ?
tipoValorPasso = ?
tipoConverter = ?
ok???
Thiago_Siqueira
Pegando o tópico no meio…
Testei o código que o dsystem lhe passou e deu certo também
Faça as contas na calculadora, e verifique no seu programa…
Se continuar dando 0, poste novamente.
M
Maiara
mas voces testaram com valores de f --> c, f --> k, k --> c, k --> f ? só o celsius ta funcionando
tipo, aquela parte dos valores tem que mudar ao inves de duas vezes com c para:
do
{
if( de.equals("c"))
{
if ( para.equals("f"))
resultado = ((valorPassadoPassado * 1.8) + 32);
else if ( para.equals("k"))
resultado = ((valorPassadoPassado) + 273);
else
resultado = (valorPassadoPassado);
}
else if ( de.equals( "f"))
{
if (para.equals( "c"))
resultado = (((valorPassadoPassado) - 32) / 1.8);
else if ( para.equals( "k"))
resultado = (((valorPassadoPassado) + 459.67) / 1.8);
else
resultado = valorPassadoPassado;
}
else if (de.equals( "k"))
{
if (para.equals( "c"))
resultado = ((valorPassadoPassado) - 273);
else if ( para.equals( "f"))
resultado = (((valorPassadoPassado) * 1.8) - 459.67);
else
resultado = (valorPassadoPassado);
}
System.out.println (resultado);
System.out.println ("Deseja fazer outra conversão?(s/n)");
repete=sc.next();
}
while (repete.toLowerCase().equals("s"));