Бесконечный локон, положив число, не сообщил

Я сделал эту программу, но когда я ввожу значение, не сообщаю, Вы падаете в бесконечный локон. Как я могу делать для того, чтобы Вы вышли из локона, прося число снова?

public class Prubea1 {

    public static final int MINIM_NUM = 1;
    public static final int MAXIM_NUM = 15;

    public static void main(String[] args) {

        int numero = 0;
        Scanner scan = new Scanner(System.in);
        //modifico boolean dadaCorrecta a false para que entre el dato
        boolean dadaCorrecta = false;
        boolean numeroCorrecte = false;

        while (!numeroCorrecte) {

            System.out.print("Entra un valor entre 1 - 15: ");
            dadaCorrecta = scan.hasNextInt();

            if (dadaCorrecta) {

                numero = scan.nextInt();
                // pongo dadaCorrecta  a false puesto que aun no ha entrado.
                dadaCorrecta = false;
                if ((numero < 1) || (numero > 15)) {

                    System.out.print("vuelva a introducirlo");
                    dadaCorrecta = true;

                } else {
                    numeroCorrecte = true;
                }

            } else {
                System.out.println("dada incorrecta, te que ser un sencer, torni a introduir un numero");

            }
        }
        if ((numero >= 1) && (numero <= 15)) {
            System.out.println("ho has encertat");
            System.out.println("Correcto");
            dadaCorrecta = true;
        }

    }
}
0
задан 18.10.2016, 12:04
1 ответ

Проблема состоит в том, что, если не было введено в компьютер целое число, никогда ты не звонишь в

numero = scan.nextInt();

Тогда, всегда он будет пробовать читать ту же неправильную стоимость, когда он будет пробовать:

dadaCorrecta = scan.hasNextInt();

Объясненный с немного больше детали: Какой изюм, если была введена в компьютер стоимость, которая не целое число?

  1. dadaCorrecta = scan.hasNextInt();
    и dadaCorrecta он будет фальшивым
  2. if (dadaCorrecta) {
    пойди в else { и напечатай на экране
  3. Следующее повторение цикла,
    напечатай "Entra un valor..."
  4. dadaCorrecta = scan.hasNextInt();
    и dadaCorrecta он будет фальшивым, потому что он спрашивает на той же линии, что только что

Это то же самое, что и шаг 1... Видно, как никогда он не выходит из цикла?

Если он неправильный, ты был бы должен читать стоимость отказываться от этого с:

scan.next();

И так позволять, что он прочитал следующую линию, введенную в компьютер пользователем

Начиная с этого, следующего раза, который называется в:

dadaCorrecta = scan.hasNextInt();

он будет спрашивать из-за следующей линии.


Код.

public class Prubea1 {

    public static final int MINIM_NUM = 1;
    public static final int MAXIM_NUM = 15;

    public static void main(String[] args) {

        int numero = 0;
        Scanner scan = new Scanner(System.in);
        //modifico boolean dadaCorrecta a false para que entre el dato
        boolean dadaCorrecta = false;
        boolean numeroCorrecte = false;

        while (!numeroCorrecte) {

            System.out.print("Entra un valor entre 1 - 15: ");
            dadaCorrecta = scan.hasNextInt();

            if (dadaCorrecta) {

                numero = scan.nextInt();
                // pongo dadaCorrecta  a false puesto que aun no ha entrado.
                dadaCorrecta = false;
                if ((numero < 1) || (numero > 15)) {

                    System.out.print("vuelva a introducirlo");
                    dadaCorrecta = true;

                } else {
                    numeroCorrecte = true;
                }

            } else {
                System.out.println("dada incorrecta, te que ser un sencer, torni a introduir un numero");


                scan.next(); // <------- Acá descartamos el valor incorrecto


            }
        }
        if ((numero >= 1) && (numero <= 15)) {
            System.out.println("ho has encertat");
            System.out.println("Correcto");
            dadaCorrecta = true;
        }

    }
}
4
ответ дан 24.11.2019, 13:03
  • 1
    Конечно функционируй, тогда команда scan.next (); просто откажись от неправильной стоимости, я это вижу, но не enteindo очень хорошо, потому что оно функционирует. – Carlos 18.10.2016, 12:47
  • 2
    @Carlos, Хотя я это использую, чтобы отказываться, верно podr и # 237; чтобы использовать, чтобы читать как String linea = scan.next();... Пока ты не прочитал ее l и # 237; nea, scan.hasNextInt() оставаться и # 225; refiri и # 233; ndose в ту же самую . scan.next() сходный с scan.nextInt(), но возвращает string вместо int. – Mariano 18.10.2016, 12:52
  • 3
    Конечно сейчас, если, повторяется цикл как уже принятая в доме возвращается к else и печатает, бесконечный цикл. – Carlos 18.10.2016, 13:26
  • 4
    тогда в линии scan, next (); то, что мы говорим ему в программу, состоит в том, что мы будем вводить одну новая информация, нет? – Carlos 18.10.2016, 13:27
  • 5
    Scanner.next() прочитай и возврати pr и # 243; xima l и # 237; nea введенная в компьютер, или даже, если не неглинистый песчаник и # 243; ничто не блокирует программу до тех пор, пока не будет введена в компьютер одна l и # 237; nea. В этом случае, уже hab и # 237; во введенный в компьютер одна l и # 237; nea, но хочется происходить со следующей. – Mariano 18.10.2016, 13:35

Теги

Похожие вопросы