是否可以多次使用文件扫描程序而无需声明多个扫描程序?

问题描述 投票:1回答:1

我正在为我的即兴剧院制作一个节目,这将有助于我们在一个晚上挑选我们在节目中播放的游戏,而不会重叠任何其他游戏的风格。我遇到了一个问题。在下面的代码中,Scanner scWU读取包含即兴游戏名称的.txt文件,而Scanner sc是一个普通的System.in扫描程序。

我在下面贴了两个方法。 getWarmUp()在被认为是特定类别的可玩游戏(在这种情况下,是热身游戏类别)之后返回字符串(游戏)。 isWarmUp()读取warmupgames.txt文件并查看输入的游戏是否确实是一个热身游戏

我的问题是:如果用户输入游戏名称失败(并且isWarmUp返回false),我该如何重新启动方法或重置文件顶部的scWU扫描程序?我必须申报多个扫描仪吗?或者,当用户第一次无法正确进入游戏后,我是否可以轻松地使相同的扫描仪再次扫描文件? (注意:我知道第25行的while循环是一个无限循环。这是我希望解决这个问题的地方)

我会回答有关我的代码的任何困惑

   public static String getWarmUp(Scanner sc, Scanner scWU)
   {
      String prompt = "What warm-up game will you choose? \n" +
                      "(NOTE: Type game as it's written on the board. Caps and symbols don't matter.)\n" +
                      "> ";

      System.out.print(prompt);
      String game = sc.nextLine();

      //This while loop is infinite. This is where I'm hoping to somehow allow the scanner to reset and
      //read again on a failed input
      while(!warmUp)
      {
         warmUp = isWarmUp(scWU, game);
         if(!warmUp)
            System.out.println("That's not a warm-up game, try again.");
      }

      return game;
   }

   public static boolean isWarmUp(Scanner scWU1, String game)
   {
      int lineNum = 0;

         while(scWU1.hasNextLine())
         {
            String line = scWU1.nextLine();
            lineNum++;
            if(line.equalsIgnoreCase(game))
               return true;
         }

      return false;
java file java.util.scanner
1个回答
1
投票

这就是我的意思。大概你现在正在使用getWarmUp这样的东西:

String gamesFileName = "theGamesFile.txt");
Scanner in = new Scanner(System.in);
Scanner games = new Scanner(gamesFileName);
getWarmUp(in, games);

getWarmUp(或者更确切地说,isWarmUpgetWarmUp称之为)可能需要从一开始就重新阅读该文件。它能做到这一点的唯一方法是创建一个新的Scanner。你需要文件名才能创建新的Scanner。所以让getWarmUp将文件名作为参数而不是打开的Scanner

public static String getWarmUp(Scanner sc, String gamesFn)
   {
      boolean warmUp = false;    
      while(!warmUp)
      {
          String prompt = "What warm-up game will you choose? \n" +
                          "(NOTE: Type game as it's written on the board. Caps and symbols don't matter.)\n" +
                      "> ";
          System.out.print(prompt);

          String game = sc.nextLine();

          Scanner scWU = new Scanner(gamesFn);
          warmUp = isWarmUp(scWU, game);
          scWU.close();
          if(!warmUp)
              System.out.println("That's not a warm-up game, try again.");
      }    
      return game;
   }    

然后像这样称呼它:

String gamesFileName = "theGamesFile.txt");
Scanner in = new Scanner(System.in);
getWarmUp(in, gamesFileName);
© www.soinside.com 2019 - 2024. All rights reserved.