[RESOLVIDO] Ajuda

Estou iniciando em java e meu professor passou este exercício

Usando os metodos do JOptionPane construa os Programas abaixo
Escolha uma opção de conversa
1 - graus C° para F°
2 - Graus F° para C°
3 - Reais para Dolar
4 - Dolar para reais

Se o usuario escolher:

1 - mostre graus C
2 - graus F
3 - reais
4 - Dolar

  • caso o usuario clique em cancelar mostre a msg "operação cancelada"
    e volte para o menu inicial
  • se o usiario clicar em OK mostre caixa de dialogo com a conversão correspondente
  • Depois volte para o menu inicail até e repita até o usuario cancelar no menu

Não consigo passar da parte de quando o usuario clicar no botão cancelar voltar ao menu inicial (o meu programa é fechado quando eu clico), alguém poderia me ajudar?

package aula.pkg3.exercicio.pkg1;
import javax.swing.JOptionPane;

public class Aula3Exercicio1 {

    public static void main(String[] args) {
    
   String caixa, cel, fah, rea, dol;
   int escolha;
   float celsius, fahrenheit;
   double reais, dolar;
   
  
    
    celsius = 0;
    escolha = 0;
    fahrenheit = 0;
    reais = 0;
    dolar = 0;
    
    
       
    caixa = JOptionPane.showInputDialog("Escolha uma opção de conversão"
                        + "\n\n1 - graus C° para F°   \n" + "2 - Graus F° para C°\n" + "3 - Reais para Dolar\n" + "4 - Dolar para reais\n\n");
    
    escolha = Integer.parseInt(caixa);
        
                if (escolha == 1)
                {   
                    cel = JOptionPane.showInputDialog("Graus ºC ");
                    celsius = Float.parseFloat(cel);
                    
                    fahrenheit = (celsius * 9/5) + 32;
                    
                    JOptionPane.showMessageDialog(null, " A temperatura em Fahrenheit ficou " +fahrenheit);
                    
                }
                
                else if (escolha == 2)
                {
                    fah = JOptionPane.showInputDialog("Graus ºF");
                    fahrenheit = Float.parseFloat(fah);
                    
                    celsius = ((fahrenheit - 32) * 5 / 9);
                    
                    JOptionPane.showMessageDialog(null, " A temperatura em Celsius ficou " +celsius);
                }
                
                else if (escolha == 3)
                {
                    rea = JOptionPane.showInputDialog("Reais R$");
                    reais = Float.parseFloat(rea);
                    
                    dolar = (reais / 3.22);
                    
                    JOptionPane.showMessageDialog(null, " A conversão para dólar ficou " +dolar);  
                }
                else if (escolha == 4)
                {
                    dol = JOptionPane.showInputDialog("Dolar U$");
                    dolar = Float.parseFloat(dol);
                    
                    reais = (dolar * 3.22);
                    
                    JOptionPane.showMessageDialog(null, " A conversão para dólar ficou " +reais);  
                }
                else
                {
                    JOptionPane.showMessageDialog(null, "Opção invalida!");  
                }
   }
    
    

}

showInputDialog retorna null se o usuário clicar em Cancelar ou um String vazia caso não digite nada e clique em Ok.

Depois desta linha:

escolha = Integer.parseInt(caixa);

Faça um teste verificando se escolha é igual a null ou uma string vazia. Caso positivo, exiba a mensagem “operação cancelada” e encerre o programa em seguida.

if (escolha == null || escolha.equals("")) {
    /* exiba a mensagem aqui */
}

Deu erro no seu

if (escolha == null || escolha.equals("")) {
/* exiba a mensagem aqui */
}

Meu código:

package aula.pkg3.exercicio.pkg1;
import javax.swing.JOptionPane;

public class Aula3Exercicio1 {

public static void main(String[] args) {

String caixa, cel, fah, rea, dol;
int escolha;
float celsius, fahrenheit;
double reais, dolar;

escolha = 0;
celsius = 0;
fahrenheit = 0;
reais = 0;
dolar = 0;

caixa = JOptionPane.showInputDialog("Escolha uma opção de conversão" + "\n\n1 - graus C° para F°   \n" + "2 - Graus F° para C°\n" + "3 - Reais para Dolar\n" + "4 - Dolar para reais\n\n");

        escolha = Integer.parseInt(caixa);

        if (escolha == null || escolha.equals("")); 
        {
            JOptionPane.showMessageDialog(null ,"Operação Cancelada");
        }
    
        switch (escolha)
                {
                case 1:
                {   
                    cel = JOptionPane.showInputDialog("Graus ºC ");
                    celsius = Float.parseFloat(cel);
                
                    fahrenheit = (celsius * 9/5) + 32;
                
                    JOptionPane.showMessageDialog(null, " A temperatura em Fahrenheit ficou " +fahrenheit);
                    break;
                }
                
                case 2:
                {
                    fah = JOptionPane.showInputDialog("Graus ºF");
                    fahrenheit = Float.parseFloat(fah);
                
                    celsius = ((fahrenheit - 32) * 5 / 9);
                
                    JOptionPane.showMessageDialog(null, " A temperatura em Celsius ficou " +celsius);
                    break;
                }
                
                case 3:
                {
                    rea = JOptionPane.showInputDialog("Reais R$");
                    reais = Float.parseFloat(rea);
                
                    dolar = (reais / 3.22);
                
                    JOptionPane.showMessageDialog(null, " A conversão para dólar ficou " +dolar);  
                    break;
                }
                
                case 4:
                {
                    dol = JOptionPane.showInputDialog("Dolar U$");
                    dolar = Float.parseFloat(dol);
                
                    reais = (dolar * 3.22);
                
                    JOptionPane.showMessageDialog(null, " A conversão para dólar ficou " +reais);
                    break;
                }
                
                default:
                {
                    JOptionPane.showMessageDialog(null, "Opção invalida!");
                    break;
                }
                    
            
                }

}

}

Você precisa colocar tudo dentro de um loop. Nesse exemplo que fiz, coloquei dentro de um do {} while
E para tratar o botao de cancelar e OK (sendo a entrada nula), coloquei dentro de um try catch


import javax.swing.JOptionPane;

public class Aula3Exercicio1 {

public static void main(String[] args) {
int escolha = 0;
float celsius, fahrenheit;
double reais, dolar;

do {    
        try {
        escolha = Integer.parseInt(JOptionPane.showInputDialog("Escolha uma opção de conversão" +
        "\n\n1 - graus C° para F°   \n" + "2 - Graus F° para C°\n" + 
        "3 - Reais para Dolar\n" + "4 - Dolar para reais\n"+"5 - Sair\n\n"));
             
        switch (escolha)
                {
                case 1:
                {   
                    try {
                    celsius = Float.parseFloat(JOptionPane.showInputDialog("Graus ºC "));
                    fahrenheit = (celsius * 9/5) + 32;
                    JOptionPane.showMessageDialog(null, " A temperatura em Fahrenheit ficou " +fahrenheit);
                    }    catch (Exception ex) {
        
    }
                    break;
                }

                case 2:
                {
                    try {
                    fahrenheit = Float.parseFloat(JOptionPane.showInputDialog("Graus ºF"));
                    celsius = ((fahrenheit - 32) * 5 / 9);
                    JOptionPane.showMessageDialog(null, "A temperatura em Celsius ficou " +celsius);
                    }  catch (Exception ex) {
        
    }
                    break;
                }

                case 3:
                {
                    try {
                    reais = Double.parseDouble(JOptionPane.showInputDialog("Reais R$"));
                    dolar = (reais / 3.22);
                    JOptionPane.showMessageDialog(null, "A conversão para dólar ficou " +dolar);  
                    }  catch (Exception ex) {
        
    }
                    break;
                }

                case 4:
                {
                    try {
                    dolar = Double.parseDouble(JOptionPane.showInputDialog("Dolar U$"));
                    reais = (dolar * 3.22);
                    JOptionPane.showMessageDialog(null, "A conversão para dólar ficou " +reais);
                    } catch (Exception ex) {
        
    }
                    break;
                }

                default:
                {
                    JOptionPane.showMessageDialog(null, "Opção invalida!");
                    break;
                }


                }
        
        } catch (NumberFormatException e) { 
                   JOptionPane.showMessageDialog(null, "Entrada invalida ou nula \n"+e.getMessage());
        }  

         } while (escolha != 5);

    } 
}
1 curtida

Muito obrigado, deu super certo. Só uma pergunta. Qual a função desses dois itens?

catch (Exception ex)

e do

catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, “Entrada invalida ou nula \n”+e.getMessage());
}

Voce declarou um int, para a variavel escolha. Caso você coloque letras/String, esse catch vai capturar esse erro de tipos incompativeis, o NumberFormatException é uma exception especifica para isso.

O catch Exception é uma super Classe, ela captura qualque erro, ou Exception