【发布时间】:2019-04-06 00:38:32
【问题描述】:
我正在为我的即兴剧院制作一个程序,该程序将帮助我们挑选出我们在夜间演出中玩的游戏,而不会与任何其他游戏的风格重叠。我遇到了一个问题。在下面的代码中,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;
【问题讨论】:
-
如果您需要能够再次开始读取文件,则不能将已在该文件上打开的
Scanner传递给您的getWarmUp方法:您需要将文件名传递为一个String以便getWarmUp可以为自己打开(必要时关闭并重新打开)该文件。 -
@KevinAnderson 我可以在 getWarmUp 中使用关闭和重新打开命令吗?或者我需要将文件名作为字符串传递。如果是后者,你能告诉我一个如何通过字符串打开文件的小例子吗?
标签: java file java.util.scanner