Сейчас изучаю Java в школе и пишу классическую игру «Угадай число». Мне нужно добавить дополнительную возможность выхода из программы в середине программы, но я немного запутался в том, как правильно добавить эту возможность? Меня больше всего смущает, как я смогу это сделать, учитывая, что сканер запрашивает int, где я хочу, чтобы строка «вышла», чтобы позволить пользователю выйти.
import java.util.Scanner;
import java.util.Random;
public class NumberGuesser {
public static void playGuess() {
// method created to run all the game logic when the main method calls it
Random rand = new Random();
Scanner sc = new Scanner(System.in);
int answer = rand.nextInt(50 - -50 + 1) + -50;
int totalGuesses = 1;
// storing random + input + guess count
while (true) {
// while loop to run while method is called + random excluded to not create new one each guess
System.out.println("Please enter a number between -50 and 50.");
int guess = sc.nextInt();
if (guess > 50 || guess < -50) {
// incorrect entry handling first (does not add to count if incorrect)
System.out.println("Incorrect entry.");
} else if (guess == answer) {
// correct answer check + break
System.out.println("Correct! It took you " + totalGuesses + " guesses.");
break;
} else if (guess < answer) {
// if guess is less than + adds to count
System.out.println("The number is higher.");
totalGuesses++;
} else if (guess > answer) {
// if guess is more than + adds to count
System.out.println("The number is lower.");
totalGuesses++;
}
}
}
public static void main (String[]args) {
// main method to call the game + prompt to play again
boolean playAgain = true;
do {
// call game when user input is y + ends program if not
playGuess();
System.out.println("Would you like to play again? Y/N.");
Scanner sc = new Scanner(System.in);
String answer = sc.nextLine();
playAgain = answer.equalsIgnoreCase("y");
} while (playAgain);
}
}
Что вы подразумеваете под «выйти в середине программы»? Если бы вы привели пример, это прояснило бы вопрос. Хотели бы вы сыграть еще раз? Да/Нет. Y Пожалуйста, введите число от -50 до 50. quit
Прочитайте ввод как String, используя sc.nextLine(). Проверьте, равен ли он "quit", в противном случае проанализируйте его как Integer и продолжайте, как и сейчас.
Просто введите символ EOF: ctrl/d в Windows, ctrl/z в Unix и Linux.




Вместо использования sc.nextInt() вы можете получить пользовательский ввод в виде строки, используя sc.nextLine(), проверить наличие слова quit, а затем либо выйти из программы, либо преобразовать введенные данные в число.
int guess;
String input = sc.nextLine();
if (input.equals("quit"))
System.exit(0);
else
guess = Integer.parseInt(input);
Эй, это очень помогает, спасибо! Просто продолжение для новичка, почему бы вам не заключить в скобки if/else? Это то, что мне не нужно делать в операторах if? У меня сложилось такое впечатление.
Вам нужно это сделать только в том случае, если после if/else/for и т. д. имеется более одного оператора. ... Вы можете найти документацию здесь в разделе Блоки.
re: использование/опускание фигурных скобок, конечно, они необязательны, но их пропуск приводит к тонким ошибкам. Из docs.oracle.com/javase/tutorial/java/nutsandbolts/if.html — «Решение о том, когда опускать фигурные скобки, является делом личного вкуса. Их отсутствие может сделать код более хрупким. Если второй оператор позже добавленный в предложение «then», распространенной ошибкой будет забывание добавить новые необходимые фигурные скобки. Компилятор не сможет обнаружить такую ошибку, и вы просто получите неверные результаты.
Введите номер за пределами поля для выхода, например 100?