Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] catch

Alguém pode me explicar por que quando acontece a exceção do catch, o programa não volta para a iteração?

package br.com.exercicioweb;

import java.util.InputMismatchException; import java.util.Scanner;

public class Cumprimentos {

public static void main(String[] args) {

    Scanner leitura = new Scanner(System.in);
    int horario = 0;

    try {
        while (true) {
            System.out.println("Digite a hora(inteira) agora: ");
            horario = leitura.nextInt();

            if (horario > 23) {
                System.out.println("Digite um horário válido!");
                continue;
            }

            if (horario >= 00 && horario <= 11) {
                System.out.println("Bom dia!");
                break;

            } else if (horario >= 12 && horario <= 17) {
                System.out.println("Boa tarde!");
                break;

            } else if (horario >= 18 && horario <= 23) {
                System.out.println("Boa noite!");
                break;

            }

        }

        horario ++;
    } catch (InputMismatchException e) {
        System.out.println(e.getMessage());
        System.out.println("Digite um número entre 00 a 23!");
        leitura.nextLine();
        horario--;
    }
    

}

}

4 respostas

Oi, bom dia @Patrícia.

Eu ainda não cheguei nessa parte , mas pelo visto o comando try {}catch {} vai basicamente executar o que está dentro do try , como você colocou o while loop dentro do try, na hora que tiver um erro ele vai para o catch e não tem como voltar mais para o try. Acredito que nesse caso o while deveria ficar do lado de fora do try.

while(true){
try{}
catch{}
}

Usando essa formatação você sempre vai conseguir executar o laço while e ainda resolver os casos que forem do tipo try{}catch{}, desculpe mas eu ainda não cheguei nessa parte, mas pelo que entendi de sua dúvida é algo assim. Se deu certo marque como uma possível solução. Obrigado.

Oi Adalberto,

obrigada por tentar me ajudar, mas infelizmente não deu certo. Fazendo dessa forma que você falou, surge muitos erros.

Poxa que pena. Tenta assim

import java.util.InputMismatchException;
import java.util.Scanner;

public static void main(String[] args) {
    Scanner leitura = new Scanner(System.in);
    int horario = 0;

    while (true) {
        try {
            System.out.println("Digite a hora(inteira) agora: ");
            horario = leitura.nextInt();

            if (horario > 23) {
                System.out.println("Digite um horário válido!");
                continue;
            }

            if (horario >= 00 && horario <= 11) {
                System.out.println("Bom dia!");
                break;

            } else if (horario >= 12 && horario <= 17) {
                System.out.println("Boa tarde!");
                break;

            } else if (horario >= 18 && horario <= 23) {
                System.out.println("Boa noite!");
                break;
            }
        } catch (InputMismatchException e) {
            System.out.println("Digite um número entre 00 a 23!");
            leitura.nextLine();
        }
    }
}
solução!

Agora deu certo sim! :D Muito obrigada!