Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以多次使用文件扫描程序而不声明多个扫描程序?_Java_File_Java.util.scanner - Fatal编程技术网

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

Java 是否可以多次使用文件扫描程序而不声明多个扫描程序?,java,file,java.util.scanner,Java,File,Java.util.scanner,我正在为我的即兴剧院制作一个节目,它将帮助我们挑选我们在一个晚上的表演中玩的游戏,而不会与任何其他游戏的风格重叠。不过我遇到了一个问题。在下面的代码中,Scanner scWU读取一个包含即兴游戏名称的.txt文件,Scanner sc是Scanner中的一个普通系统 我在下面粘贴了两种方法getWarmUp()将字符串(游戏)视为某个类别的可行游戏(在本例中为warmup游戏类别)后返回该字符串isWarmUp()读取warmupgames.txt文件,查看输入的游戏是否确实是热身游戏 我的问

我正在为我的即兴剧院制作一个节目,它将帮助我们挑选我们在一个晚上的表演中玩的游戏,而不会与任何其他游戏的风格重叠。不过我遇到了一个问题。在下面的代码中,Scanner scWU读取一个包含即兴游戏名称的.txt文件,Scanner sc是Scanner中的一个普通系统

我在下面粘贴了两种方法getWarmUp()将字符串(游戏)视为某个类别的可行游戏(在本例中为warmup游戏类别)后返回该字符串isWarmUp()读取warmupgames.txt文件,查看输入的游戏是否确实是热身游戏

我的问题是:如果用户未能输入游戏名称(而iWarmup返回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;

这就是我的意思。大概您现在使用的是
getWarmUp
类似的东西:

String gamesFileName = "theGamesFile.txt");
Scanner in = new Scanner(System.in);
Scanner games = new Scanner(gamesFileName);
getWarmUp(in, games);
String gamesFileName = "theGamesFile.txt");
Scanner in = new Scanner(System.in);
getWarmUp(in, gamesFileName);
但是
getWarmUp
(或者更确切地说,
isWarmUp
,它调用
getWarmUp
)可能需要从头开始重新读取文件。它能做到这一点的唯一方法是创建一个新的
扫描仪
。您需要文件名才能创建新的
扫描仪。因此,让
getWarmUp
将文件名作为参数,而不是打开的
扫描仪

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);
Scanner games = new Scanner(gamesFileName);
getWarmUp(in, games);
String gamesFileName = "theGamesFile.txt");
Scanner in = new Scanner(System.in);
getWarmUp(in, gamesFileName);

如果需要重新开始读取文件,则不能将已在该文件上打开的
扫描仪
传递给
getWarmUp
方法:需要将文件名作为
字符串
传递,以便
getWarmUp
可以打开(如有必要,关闭并重新打开)文件本身。@KevinAnderson我能在getWarmUp中使用关闭和重新打开命令吗?或者我需要将文件名作为字符串传递。如果是后者,你能给我举个小例子,说明如何通过字符串打开文件吗?谢谢!非常有用。我还应该提到我打算为不同的游戏类别使用多个.txt文件。那么,我能为每个.txt文件打开一个扫描仪吗?并取消名称关联(如您的示例)?例如:
Scanner scWu=new Scanner(warmupGamesTxtFile);扫描仪scR=新扫描仪(replayGamesTxtFile)
(假设Scanner参数是带有txt文件名的字符串)如果可以的话,我会说一次尝试将其保留为一个
Scanner
。您是否需要同时读取热身游戏文件和重播游戏文件?让我们不要忘记你已经想到或可能(记住,“可能”通常变成“肯定会”)在未来发明的任何其他类别的游戏文件?如果你不小心(;->),你可能会在
扫描仪中看到你的眼球