Можете ли вы отложить буферные чтения, чтобы они не работали до указанного времени?

#java

#java

Вопрос:

Итак, я работаю над базовой математической игрой, и у меня есть вопрос, связанный с BufferedReaders. Во время первой части приложения на выходе отображаются некоторые вводные сообщения, показывающие, как работает игра. После этого начинается игра.

Моя единственная проблема заключается в том, что во время метода introductoryMessage (), который, очевидно, предшествует методу startGame (), пользователь может вводить и отправлять элементы, пока он все еще находится на этапе ввода, что может испортить игру. Возможно ли отложить буферизованное средство чтения, чтобы оно запускалось только при запуске метода startGame()? Вот некоторый код.

 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;
import java.util.concurrent.TimeUnit;

public class mainMathClass {

  public static void introductoryMessages() throws InterruptedException {


    System.out.println("Hello! This is an output based addition game.");

    TimeUnit.SECONDS.sleep(2);

    System.out.println("nThe rules are simple. I will ask a math"  
      "nquestion, and you will input the answer"  
      "nunderneath the most recent question.");

    TimeUnit.SECONDS.sleep(3);

    System.out.println("nHere is an example:");

    TimeUnit.SECONDS.sleep(2);

    System.out.println("nWhat is 10/5?");

    TimeUnit.SECONDS.sleep(2);

    System.out.println("2");

    TimeUnit.SECONDS.sleep(2);

    System.out.println("nIt is as simple as that. Each correct answer is "  
      "worth  1 point. Incorrect answers are worth -1 "  
      "points");

    TimeUnit.SECONDS.sleep(2);

    System.out.println("Here is question 1:");

    TimeUnit.SECONDS.sleep(3);
  }

  public static void startGame() throws IOException, InterruptedException {
    //Global variables. Do not move.
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String userInput;

    int correctAnswerCount = 0;
    int points = 0;
    int i;

    for (i = 1; i <= 10; i  ) {
      /*The following variables must be declared in
       * in the for loop. If they are not, they cannot
       * change, meaning the for loop will not work
       * properly.
       */
      Random r = new Random();
      int low = 1;
      int high = 20;
      int a = r.nextInt(high - low)   low;
      int b = r.nextInt(high - low)   low;
      int problemAnswer = (a   b);
      /*Change the math symbol in problemAnswer
       *to change the way the game is played.
       *Be sure to change the string " " to whatever
       *symbol you replaced the plus symbol with in problemAnswer
       */

      String aToString = Integer.toString(a);
      String bToString = Integer.toString(b);

      //Questions start here
      System.out.println("What is "   aToString   "   "   bToString   "?");

      userInput = br.readLine();
      int userInputToString = Integer.parseInt(userInput);

      //Check if userInputToString is equal to the math questions answer.
      //Display a certain message depending on if the users answer is correct.
      if (userInputToString == problemAnswer) { //Beginning of if-statement #1

        System.out.println("nYou said "   userInputToString   ". That is correct!"  
          "nYou earned 1 point!");
        points  ;
        correctAnswerCount  ;

        TimeUnit.SECONDS.sleep(2);
        System.out.println();

      } else {
        System.out.println("nYou said "   userInputToString   ". That is incorrect."  
          "nYou lost one point. :(");
        points--;

        TimeUnit.SECONDS.sleep(2);
        System.out.println();
      }

    }

    TimeUnit.SECONDS.sleep(2);
    System.out.println("You have "   correctAnswerCount   " questions answered correctly.");

    TimeUnit.SECONDS.sleep(2);
    System.out.println("nYou have "   points   " points.");

  } //End of initializeProblem() method


  public static void main(String[] args) throws IOException, InterruptedException {

  }
}
  

Кроме того, я искал, как заставить приложение принимать только числа в качестве входных данных и отображать ошибку, если входные данные не являются целым числом, и двигаться дальше. Многие из них включают блок try-catch, я просто не знаю, куда его поместить. Если бы кто-нибудь мог помочь мне с этим, пока они здесь, это было бы здорово. Спасибо.

Комментарии:

1. Почему бы просто не вызвать startGame() в конце вводного метода? Таким образом, как только вводный метод будет завершен, теперь он вызовет startGame() метод. Я предполагаю, что эта игра не заботится о выполнении других задач в фоновом режиме? Как и в, это всего лишь однопоточное приложение, которое заботится только о дальнейшей обработке с точки зрения выполнения логического кода.

2. Нет, конечно, нет способа отложить BufferedReader . Я использую его в течение 22 лет, и это первый раз, когда я даже вижу такой вопрос. Люди не встраивают произвольные функции в программное обеспечение.

3. Просто создайте условное окружение, когда читателю должно быть разрешено использовать. Логическое значение readerUseable = false. Как только игра запустится, readerUseable = true. А затем просто окружите любой код, требующий использования читателем, символом if (readerUseable)