Как повторить оператор "if", когда вывод false

Я работаю над простой игрой, в которой пользователь должен угадать случайное число. У меня есть весь код, за исключением того факта, что если догадка слишком высока или слишком низка, я не знаю, как позволить им снова ввести номер и продолжать играть, пока они его не получат. Он просто останавливается, вот код:

import java.util.Scanner;
import java.util.Random;

public class Test {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Random rand = new Random();

        int random = rand.nextInt(10) + 1;

        System.out.print("Pick a number 1-10: ");
        int number = input.nextInt();

        if (number == random) {
            System.out.println("Good!");
        } else if (number > random) {
            System.out.println("Too Big");
        } else if (number < random) {
            System.out.println("Too Small");
        }
    }
}

7 ответов


для того, чтобы повторить все, что вам нужно петлю.

общий способ повторения до тех пор, пока условие в середине тела цикла не будет выполнено, это построение бесконечный цикл, и добавление способа вырваться из него.

идиоматический способ создания бесконечного цикла в Java-это while(true):

while (true) {
    System.out.print("Pick a number 1-10: ");
    int number = input.nextInt();
    if (number == random) {
        System.out.println("Good!");
        break; // This ends the loop
    } else if (number > random) {
        System.out.println("Too Big");
    } else if (number < random) {
        System.out.println("Too Small");
    }
}

этот цикл будет продолжать свои итерации, пока путь кода не достигнет break заявление.


вам нужно использовать цикл для этого. Код должен работать следующим образом:

import java.util.Scanner;
import java.util.Random;

public class Test {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Random rand = new Random();

        int random = rand.nextInt(10) + 1;

        System.out.print("Pick a number 1-10: ");
        int number = input.nextInt();

        boolean found = false;
        while (!found) {
           if (number == random) {
                System.out.println("Good!");
               found = true;
            } else if (number > random) {
                System.out.println("Too Big, try again:");
                number = input.nextInt();
            } else if (number < random) {
                System.out.println("Too Small, try again:");
                number = input.nextInt();
            }
        }
    }
}

можно использовать do...while.

Random rand = new Random();
int random = rand.nextInt(10) + 1;
do {
  Scanner input = new Scanner(System.in);

  System.out.print("Pick a number 1-10: ");
  int number = input.nextInt();

  if (number == random) {
    System.out.println("Good!");
  } else if (number > random) {
    System.out.println("Too Big");
  } else if (number < random) {
    System.out.println("Too Small");
  }

} while ( number != random );

Существует несколько методов для цикла вашего запроса, среди них:

  • while (<condition>) { <do something> }

  • do { <something> } while (<condition>);

  • for (<init statement>, <condition>, <update statement>) { <do something> }

чтобы показать, вы можете избежать использования одной из вышеупомянутых явных конструкций цикла с помощью рекурсии:

mport java.util.Scanner;
import java.util.Random;

public class Test {

    public static void ask(int random) {
        Scanner input = new Scanner(System.in);
        System.out.print("Pick a number 1-10: ");
        int number = input.nextInt();

        if (number == random) {
            System.out.println("Good!");
        } else if (number > random) {
            System.out.println("Too Big");
            ask(random);
        } else if (number < random) {
            System.out.println("Too Small");
            ask(random);
        }
    }


    public static void main(String[] args) {
        Random rand = new Random();

        int random = rand.nextInt(10) + 1;
        ask(random);
    }
}
на ask() метод продолжает вызывать себя, пока не будет достигнуто конечное условие (пользователь угадал правильно).

в зависимости от умность виртуальной машины Java, это может подчеркнуть стек вызовов, или нет.


заключите операторы if в цикл do-while, который будет петлять, пока пользователь не угадал число:

 int number;
 do {
    System.out.print("Pick a number 1-10: ");
    number = input.nextInt();

    if (number == random) {
        System.out.println("Good!");
    } else if (number > random) {
        System.out.println("Too Big");
    } else if (number < random) {
        System.out.println("Too Small");
    }
 } while (number != random);

чтобы условно повторить код, используйте цикл.

// this code will execute only once
System.out.print("Pick a number 1-10: ");
// initialize number to a value that would not be used and not equal random
int number = -1;

// the code inside the curly braces will repeat until number == random
while (number != random) {
    // get next number
    number = input.nextInt();
    // handle case one
    if(number > random) System.out.println("Too Big");
    // handle case two
    if(number < random) System.out.println("Too Small");
}
// once number == random, the condition is false so we break out of the loop
System.out.println("Good!");

то, что вы ищете, - это конструкции на языке программирования, которые позволяют вам делать определенную вещь снова и снова.

Это делается с помощью петли. Проверьте документы для цикла while например. Вот что тебе нужно.