Comecei a estudar Programação por conta própria essa semana começando por Lógica de Programação, depois passei para Algoritmos e agora estou lendo livros sobre Java.
Usando o que aprendi essa semana estou tentando fazer meu primeiro programa, um Conversor de Temperatura. Consegui fazer tudo funcionar, no entanto os resultados as vezes saem com várias casas decimais. Pesquisei sobre este problema mas não consegui implantar a solução no meu código fonte.
Agradeceria se alguem pudesse me orientar sobre como proceder.
Se tiverem dicas sobre como fazer esse código menor ou de forma “correta” eu apreciaria muito, conhecimento é poder…
[code]
import javax.swing.JOptionPane;
class conversor
{
public static void main(String args[])
{
double valor, opcao, converter;
opcao = Double.parseDouble(JOptionPane.showInputDialog("Qual a conversão a ser realizada?\n\n 1. Celsius para Kelvin\n 2. Kelvin para Celsius\n 3. Fahrenheit para Kelvin\n 4. Kelvin para Fahrenheit\n 5. Celsius para Fahrenheit\n 6. Fahrenheit para Celsius\n\n"));
if (opcao == 1)
{
converter = Double.parseDouble(JOptionPane.showInputDialog("Insira a temperatura em Celsius"));
valor =(converter + 273);
JOptionPane.showMessageDialog(null,"A temperatura Celsius convertida em Kelvin é:\n\n"+valor);
}
else if (opcao == 2)
{
converter = Double.parseDouble(JOptionPane.showInputDialog("Insira a temperatura em Kelvin"));
valor =(converter - 273);
JOptionPane.showMessageDialog(null,"A temperatura Kelvin convertida em Celsius é:\n\n"+valor);
}
else if (opcao == 3)
{
converter = Double.parseDouble(JOptionPane.showInputDialog("Insira a temperatura em Fahrenheit"));
valor =((converter + 459.67) *5 /9);
JOptionPane.showMessageDialog(null,"A temperatura Fahrenheit convertida em Kelvin é:\n\n"+valor);
}
else if (opcao == 4)
{
converter = Double.parseDouble(JOptionPane.showInputDialog("Insira a temperatura em Kelvin"));
valor =((converter * 1.8) - 459.67);
JOptionPane.showMessageDialog(null,"A temperatura Kelvin convertida em Fahrenheit é:\n\n"+valor);
}
else if (opcao == 5)
{
converter = Double.parseDouble(JOptionPane.showInputDialog("Insira a temperatura em Celsius"));
valor =((9*converter)/5 + 32);
JOptionPane.showMessageDialog(null,"A temperatura Celsius convertida em Fahrenheit é:\n\n"+valor);
}
else if (opcao == 6)
{
converter = Double.parseDouble(JOptionPane.showInputDialog("Insira a temperatura em Fahrenheit"));
valor =(5*(converter - 32) / 9);
JOptionPane.showMessageDialog(null,"A temperatura Fahrenheit convertida em Celsius é:\n\n"+valor);
}
}
Eu recomendaria usar o switch ao inves desse monte de if.
Funciona assim:
switch (suaVariavel) {
case 1:
//seu codigo
break;
case 2:
//seu outro codigo
case 3:
//mais um codigo
break;
default:
//caso não caia em nenhum dos cases acima ele cai aqui
break;
}
//fora do switch
Explicação:
case valor Aqui indica que caso a variavel suaVariavel possua o valor X (no primeiro case) ele cai ele e realiza a instrução que está ali.
break Ao executar um break ele sai do switch. Ele passa para //fora do switch. Caso exista um outro case mas não exista um break (dentro do case que ele caiu) ele executa o outro case. Se por exemplo suaVariavel valer 2, ele executa //seu outro codigo e depois //mais um codigo e ai sim ele vai para //fora do switch
default Caso suaVariavel não se encaixe em nenhum dos cases ele cai no switch.
Espero que não tenha ficado confuso
Agora, quanto ao seu problema de casas decimais:
double temperatura = 5.50808740; // a variavel
DecimalFormat df = new DecimalFormat("###,##0.00"); // aqui criamos um
// objeto do tipo
// DecimalFormat e
// vamos usar o
// formato
// ###,##0.00
// os # segnificam que caso a quantidade de números (lol?) não cheguem
// até lá (exemplo: 9.99) ele não completa com 0 a esquerda. Já o 0,
// caso não exista
// algum número naquela posição ele coloca 0 (exemplo: 9 ficaria 9.00)
System.out.println(df.format(temperatura)); // invoca o metodo format
// que recebe a variavel
// temperatura como
// parametro e retorna ela
// em STRING já formatada
Edit:
Postei aqui também caso você não olhe o topico duplicado.
[quote=Sem_Nome]Eu recomendaria usar o switch ao inves desse monte de if.
Funciona assim:
switch (suaVariavel) {
case 1:
//seu codigo
break;
case 2:
//seu outro codigo
case 3:
//mais um codigo
break;
default:
//caso não caia em nenhum dos cases acima ele cai aqui
break;
}
//fora do switch
Explicação:
case valor Aqui indica que caso a variavel suaVariavel possua o valor X (no primeiro case) ele cai ele e realiza a instrução que está ali.
break Ao executar um break ele sai do switch. Ele passa para //fora do switch. Caso exista um outro case mas não exista um break (dentro do case que ele caiu) ele executa o outro case. Se por exemplo suaVariavel valer 2, ele executa //seu outro codigo e depois //mais um codigo e ai sim ele vai para //fora do switch
default Caso suaVariavel não se encaixe em nenhum dos cases ele cai no switch.
Espero que não tenha ficado confuso
Postei aqui também caso você não olhe o topico duplicado.[/quote]
Interessante, eu tinha lido sobre esse método e realmente simplifica o código… irei modificar e ver o resultado!
Mas e sobre a questão das casas decimais do “double”? Alguma sugestão?
Lembrando que o format retorna uma String, significa que você NÃO PODE somar, subtrair, dividir, multiplicar, etc… com o retorno dele.
Mas você pode fazer algo como:
String valorFormatado = df.format(temperatura);
Double recuperarValor = new Double(valorFormatado); //Aqui estamos utilizando a classe Double (Double com D maiusculo é uma classe NÃO É UM TIPO PRIMITIVO, tenha isso em mente)
Fiz a implementação de acordo com co que você explicou e deu certinho! No caso eu fiz assim…
[code]class conversor2
{
public static void main(String args[])
{
double valor, opcao, converter;
DecimalFormat df = new DecimalFormat("###,##0.00");
opcao = Double.parseDouble(JOptionPane.showInputDialog("Qual a conversão a ser realizada?\n\n 1. Celsius para Kelvin\n 2. Kelvin para Celsius\n 3. Fahrenheit para Kelvin\n 4. Kelvin para Fahrenheit\n 5. Celsius para Fahrenheit\n 6. Fahrenheit para Celsius\n\n"));
if (opcao == 1)
{
converter = Double.parseDouble(JOptionPane.showInputDialog("Insira a temperatura em Celsius"));
valor =(converter + 273);
JOptionPane.showMessageDialog(null,"A temperatura Celsius convertida em Kelvin é:\n\n"+(df.format(valor)));
}[/code]
Vou fazer agora o programa usando o “case” ^^ vamos ver no que dá
Sem_Nome eu mudei os “if else” conforme você sugeriu! ficou muito melhor e mais legível tambem…
Obrigado pela ajuda!
Segue resultado:
import java.text.DecimalFormat;
import javax.swing.JOptionPane;
class conversor
{
public static void main(String args[])
{
double valor, converter;
int opcao;
DecimalFormat df = new DecimalFormat("###,##0.00");
opcao = Integer.parseInt(JOptionPane.showInputDialog("Qual a conversão a ser realizada?\n\n 1. Celsius para Kelvin\n 2. Kelvin para Celsius\n 3. Fahrenheit para Kelvin\n 4. Kelvin para Fahrenheit\n 5. Celsius para Fahrenheit\n 6. Fahrenheit para Celsius\n\n"));
switch (opcao)
{
case 1:
converter = Double.parseDouble(JOptionPane.showInputDialog("Insira a temperatura em Celsius"));
valor =(converter + 273);
JOptionPane.showMessageDialog(null,"A temperatura Celsius convertida em Kelvin é:\n\n"+(df.format(valor)));
break;
case 2:
converter = Double.parseDouble(JOptionPane.showInputDialog("Insira a temperatura em Kelvin"));
valor =(converter - 273);
JOptionPane.showMessageDialog(null,"A temperatura Kelvin convertida em Celsius é:\n\n"+(df.format(valor)));
break;
case 3:
converter = Double.parseDouble(JOptionPane.showInputDialog("Insira a temperatura em Fahrenheit"));
valor =((converter + 459.67) *5 /9);
JOptionPane.showMessageDialog(null,"A temperatura Fahrenheit convertida em Kelvin é:\n\n"+(df.format(valor)));
break;
case 4:
converter = Double.parseDouble(JOptionPane.showInputDialog("Insira a temperatura em Kelvin"));
valor =((converter * 1.8) - 459.67);
JOptionPane.showMessageDialog(null,"A temperatura Kelvin convertida em Fahrenheit é:\n\n"+(df.format(valor)));
break;
case 5:
converter = Double.parseDouble(JOptionPane.showInputDialog("Insira a temperatura em Celsius"));
valor =((9*converter)/5 + 32);
JOptionPane.showMessageDialog(null,"A temperatura Celsius convertida em Fahrenheit é:\n\n"+(df.format(valor)));
break;
case 6:
converter = Double.parseDouble(JOptionPane.showInputDialog("Insira a temperatura em Fahrenheit"));
valor =(5*(converter - 32) / 9);
JOptionPane.showMessageDialog(null,"A temperatura Fahrenheit convertida em Celsius é:\n\n"+(df.format(valor)));
break;
default:
JOptionPane.showMessageDialog(null,"Opção Inválida, tente novamente!");
break;
}
}
}
class conversor
{
public static void main(String args[])
{
double valor, converter;
int opcao;
DecimalFormat df = new DecimalFormat("###,##0.00");
opcao = Integer.parseInt(JOptionPane.showInputDialog("Qual a conversão a ser realizada?\n\n 1. Celsius para Kelvin\n 2. Kelvin para Celsius\n 3. Fahrenheit para Kelvin\n 4. Kelvin para Fahrenheit\n 5. Celsius para Fahrenheit\n 6. Fahrenheit para Celsius\n\n"));
switch (opcao)
{
case 1:
converter = Double.parseDouble(JOptionPane.showInputDialog("Insira a temperatura em Celsius"));
valor =(converter + 273);
JOptionPane.showMessageDialog(null,"A temperatura Celsius convertida em Kelvin é:\n\n"+(df.format(valor)));
break;
case 2:
converter = Double.parseDouble(JOptionPane.showInputDialog("Insira a temperatura em Kelvin"));
valor =(converter - 273);
JOptionPane.showMessageDialog(null,"A temperatura Kelvin convertida em Celsius é:\n\n"+(df.format(valor)));
break;
case 3:
converter = Double.parseDouble(JOptionPane.showInputDialog("Insira a temperatura em Fahrenheit"));
valor =((converter + 459.67) *5 /9);
JOptionPane.showMessageDialog(null,"A temperatura Fahrenheit convertida em Kelvin é:\n\n"+(df.format(valor)));
break;
case 4:
converter = Double.parseDouble(JOptionPane.showInputDialog("Insira a temperatura em Kelvin"));
valor =((converter * 1.8) - 459.67);
JOptionPane.showMessageDialog(null,"A temperatura Kelvin convertida em Fahrenheit é:\n\n"+(df.format(valor)));
break;
case 5:
converter = Double.parseDouble(JOptionPane.showInputDialog("Insira a temperatura em Celsius"));
valor =((9*converter)/5 + 32);
JOptionPane.showMessageDialog(null,"A temperatura Celsius convertida em Fahrenheit é:\n\n"+(df.format(valor)));
break;
case 6:
converter = Double.parseDouble(JOptionPane.showInputDialog("Insira a temperatura em Fahrenheit"));
valor =(5*(converter - 32) / 9);
JOptionPane.showMessageDialog(null,"A temperatura Fahrenheit convertida em Celsius é:\n\n"+(df.format(valor)));
break;
default:
JOptionPane.showMessageDialog(null,"Opção Inválida, tente novamente!");
break;
}
}