[Resolvido]Como voltar ao Scanner após um erro

Como faço para o programa retornar a pergunta ao usuário.

import java.util.Scanner;

public class NumeroDecrescente {

public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    
    System.out.print("Informe um número inteiro maior que 1: ");
    int n = scan.nextInt();
    
    if (n < 1) {
        System.out.println("Você digitou um número menor a 1, por favor digite novamente");

Laço de repetição te diz algo?

Sim, minha dúvida é como usar o Scanner novamente.

E o que laço de repetição te diz?

Me diz isso.

while (true) {
        System.out.print("Informe um número inteiro maior que 1: ");
        int n = scan.nextInt();
        if (n <= 1) {
            System.out.println("Você digitou um número menor/igual a 1, por favor digite novamente.");
        } else {
            for (int i = 0; n >= i; n--) {
                System.out.println(n);

            } break;
        }
        

    }

}

}

Precisa de um loop infinito, mesmo?

não está infinito.

Se seu objetivo é deixar ele em loop e sempre voltar para a mensagem “Informe um numero inteiro maior que 1” é só tirar o break;

Caso você não queira deixar em loop infinito você pode fazer assim:

public static void main(String[] args) {
		boolean x = true;
		while (x == true) {
			System.out.print("Informe um número inteiro maior que 1: ");
			Scanner ler = new Scanner(System.in);
			int n = ler.nextInt();
			if (n <= 1) {
				System.out.println("Você digitou um número menor/igual a 1, por favor digite novamente.");
			} else {
				for (int i = 0; n >= i; n--) {
					System.out.println(n);

				}
				System.out.println("\nVocê deseja digitar outro número? \n1- Sim \n2- Não");
				int y = ler.nextInt();
				if (y == 2) {
					x = false;
				}

			} // break;

		}
	}
2 curtidas

Boa KPS!
Uma outra dúvida, caso na última etapa o usuário coloque outro número diferente de 2 (3,4,5 e etc) e que não seja o número 1 ele continuará o sistema, como você resolveria esse bug, com ouutro if ?

Se você quiser que o programa pare caso ele digite algo diferente de 1 pode substituir essa parte:

if (y == 2) {
	x = false;
		}

por:

if (y == 1) {
x = true;
	}else {
x= false}

ai tudo que o usuário digitar sem ser 1 vai fazer com que o programa pare.

Acho que me expliquei mal. Eu quero se caso o usuário digite um número diferente de 1 e 2 o programe mostre o erro e volta a fazer a pergunta.

Eu tentei fazer umas mudanças:

Eu queria que depois daqui:

System.out.println("\nVocê deseja digitar outro número? \n1- Sim \n2- Não");
			int y = ler.nextInt();
                            if (y != 1 && y!=2) {
                                System.out.println("Digitou um número incorreto, por favor digite novamente.");

ele recebesse o ler.nextInt novamente…

Eu consegui fazer assim, mas pode ter um modo mais fácil pois também sou iniciante na programação.

public static void main(String[] args) {
		boolean x = true;
		boolean z = true;
		while (x == true) {
			System.out.print("Informe um número inteiro maior que 1: ");
			Scanner ler = new Scanner(System.in);
			int n = ler.nextInt();
			if (n <= 1) {
				System.out.println("Você digitou um número menor/igual a 1, por favor digite novamente.");
			} else {
				for (int i = 0; n >= i; n--) {
					System.out.println(n);
					z = true;

				}
				while (z == true) {
					System.out.println("\nVocê deseja digitar outro número? \n1- Sim \n2- Não");

					int y = ler.nextInt();
					if (y != 1 && y != 2) {
						System.out.println("\nDigitou um número incorreto, por favor digite novamente.");
						z = true;
					} else {
						if (y == 2) {
							x = false;
							z = false;
						} else {
							z = false;
						}
					}

				} // break;
			}
		}
	}
1 curtida

Eu também sou novo em java… mas da uma lida nisso que acho q talvez te ajude… se não for o caso desculpe… https://www.devmedia.com.br/trabalhando-com-excecoes-em-java/27601

1 curtida

Só usar Switch

1 curtida