Conversor

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!

import java.util.*;

class Conversor
{
Scanner sc = new Scanner (System.in);
double valorPassado;
double resultado = 0;
String de, para, repete;

String perguntas()
{
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 "";

}

double resultado()
{
//calcula até o usuário digitar n ou N
do
{
if( perguntas() == “c”)
{
if ( para == “f”)
{
resultado = ((valorPassado * 1.8) + 32);
}
else if ( para == “k”)
{
resultado = ((valorPassado) + 273);
}
else
{
resultado = (valorPassado);
}
}

  else if ( de == "f")
  {
    if (para == "c")
    {
      resultado = (((valorPassado) - 32) / 1.8);
    }
    else if ( para == "k")
    {
      resultado = (((valorPassado) + 459.67) / 1.8);
    }
    else
    {
      resultado = valorPassado;
    }
  }
  
  else if (de == "k")
  {
    if (para == "c")
    {
      resultado = ((valorPassado) - 273);
    }
    else if ( 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;

}

public static void main (String [] args)
{
Conversor c = new Conversor ();

System.out.println(c.perguntas());
System.out.println(c.resultado());

}
}

.

Post seu código entre as tags [code ] e [/code ], para melhor visualização e podermos ajudar.

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

[code]public class doWhile {

public static void doWhile(){
	Scanner sc = new Scanner(System.in);
    String de,para;
    double valor;
    double resultado = 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);
    	}else if(para.equals("k")){
    		resultado = ((valor) + 273);
    	}else{
    		resultado = valor;
    	}
    }
    
    else if(de.equals("c")){
    	if(para.equals("f")){
    		resultado = ((valor * 1.8) + 32);
    	}else if(para.equals("k")){
    		resultado = ((valor) + 273);
    	}else{
    		resultado = valor;
    	}
    }
    System.out.println("Resultado da conversão " + resultado);
}

public static void main(String[] args){
	Scanner sc = new Scanner(System.in);
    doWhile();
    System.out.println("Deseja fazer nova consulta?");
    String sim = sc.nextLine();
    while(sim.toLowerCase().equals("s")){
    	doWhile();
    	 System.out.println("Deseja fazer nova consulta?");
         sim = sc.nextLine();
    }
    System.out.println("Tchau!!");
}

}
[/code]

Qq coisa pergunta!

Bjs!

qual é a lógica do programa?

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.

Já aproveitando, olá ViniGodoy,

Pq o nextInt() e nextDouble() podem dar dores de cabeça???

=]

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.

Você pode ver que outros colegas do GUJ já tiveram problemas com isso:
http://www.guj.com.br/posts/list/212604.java#1082187

.

Sem o espaço entre code e ]

simplesmente e

obrigada dsystem, mudei para equals e &&. porem o seu programa compila mas contianu dando resultado apena 0.

é assim que é pra colocar entre code?

[code]import java.util.*;

class Conversor
{
Scanner sc = new Scanner (System.in);
double valorPassado;
double resultado = 0;
String de, para, repete;

String perguntas()
{
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 “”;
}

double resultado()
{
//calcula até o usuário digitar n ou N
do
{
if( perguntas() == “c”)
{
if ( para == “f”)
{
resultado = ((valorPassado * 1.8) + 32);
}
else if ( para == “k”)
{
resultado = ((valorPassado) + 273);
}
else
{
resultado = (valorPassado);
}
}

else if ( de == “f”)
{
if (para == “c”)
{
resultado = (((valorPassado) - 32) / 1.8);
}
else if ( para == “k”)
{
resultado = (((valorPassado) + 459.67) / 1.8);
}
else
{
resultado = valorPassado;
}
}

else if (de == “k”)
{
if (para == “c”)
{
resultado = ((valorPassado) - 273);
}
else if ( 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;
}

public static void main (String [] args)
{
Conversor c = new Conversor ();

System.out.println(c.perguntas());
System.out.println(c.resultado());
}
}[/code]

Oi Maiara,

Executei na minha maquina e foi certinho.

Como você está fazendo???

Posta o código aqui para eu verificar, por favor!!

[code]import java.util.*;

public class Conversor {

public static void Conversor(){   
    Scanner sc = new Scanner(System.in);   
    String de,para;   
    double valor;   
    double resultado = 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);   
        }else if(para.equals("k")){   
            resultado = ((valor) + 273);   
        }else{   
            resultado = valor;   
        }   
    }   
       
    else if(de.equals("c")){   
        if(para.equals("f")){   
            resultado = ((valor * 1.8) + 32);   
        }else if(para.equals("k")){   
            resultado = ((valor) + 273);   
        }else{   
            resultado = valor;   
        }   
    }   
    System.out.println("Resultado da conversão " + resultado);   
}   
   
public static void main(String[] args){   
    Scanner sc = new Scanner(System.in);   
    Conversor();   
    System.out.println("Deseja fazer nova consulta?");   
    String sim = sc.nextLine();   
    while(sim.toLowerCase().equals("s")){   
        Conversor();   
         System.out.println("Deseja fazer nova consulta?");   
         sim = sc.nextLine();   
    }   
    System.out.println("Tchau!!");   
}   

}
[/code]

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???

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.

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:

[code]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"));[/code]

mas mesmo assim não calcula!!!