【发布时间】:2014-01-17 19:30:24
【问题描述】:
所以我现在正在用 JAVA 制作一个基于文本的冒险游戏。我的代码有一个小问题,这使得游戏的游戏玩法非常烦人。当玩家输入命令时,例如“向北走”,第一次就可以正常工作。但第二次,它不起作用。它不显示我的默认开关盒,因此它可以识别该命令。当我再次输入相同的命令时,例如“向北走”,它再次起作用。所以它第一次不起作用,但是再输入一次就可以了。有没有办法让它不需要两个输入就可以工作? 这是我的代码:
//// USER INPUT TIME ////
System.out.println(">_");
playerCommand = input.nextLine();
loop: while (loopInt > 0) {
switch (input.nextLine()) {
case "go north":
case "n":
alleywayGoNorth();
break loop;
case "go south":
case "s":
alleywayGoSouth();
break loop;
case "open door":
case "o door":
alleywayOpenDoorLocked();
break loop;
default:
System.out.println("That command is not valid at the moment.");
break;
}
}
////////
【问题讨论】:
-
您正在读取输入两次。
playerCommand = input.nextLine();读取第一行。switch (input.nextLine())读取下一行。我建议您将playerCommand = input.nextLine();移到while 循环中,然后将开关更改为switch (playerCommand) -
删除
loop:标签将导致while循环继续执行(假设loopInt大于0)。我猜这意味着在循环上使用带有标签的break会导致您跳出整个循环,这看起来像是您不想要的。 -
@mdl ,这实际上是我想要的。没有循环:和中断循环;下次它不会再次要求用户输入。它只会运行我的默认情况。
-
@user3207994 我很清楚...您希望用户被一遍又一遍地提示命令,对吗?目前您的问题是第一次输入命令时没有任何反应?如果我理解正确,这是因为
playerCommand = input.nextLine()行。用户输入输入,存储在playerCommand,然后你什么也不用做;而是在switch语句中再次提示。我建议你删除loop:标签,并删除playerCommand这一行。 -
@mdl 我没有事先按回车键,但我有一个更早的输入,要求输入具有额外系统输出的名称。摆脱它,输入有效! :) 谢谢你的帮助。我的代码按照现在应该的方式工作。
标签: java while-loop switch-statement