Как повторить оператор "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 например. Вот что тебе нужно.
