下面是我用来测试游戏的两个测试函数。我的问题是,我的输入将适用于 playMelee 的第一次运行,playGame 会重复调用该 playMelee,一次接受 3 个输入,这表明我希望它在这里接受 3 轮 3 '1 的输入。
我的问题是,它适用于第一轮输入,但后续输入不会显示在我的 playMelee 函数中创建的 Scanner 实例的“找不到行”错误。
我尝试过在类中创建一个通用扫描仪,并创建一个作为参数输入的扫描仪,但没有成功。
本质上:我给输入提供了 9 个不同的“1”输入,并且它只接收前 3 个输入,因为函数 playMelee 一次需要 3 个,因为它被 playGame 调用 3 次,表明它不适用于后续输入。任何帮助表示赞赏
private void provideTestInput(String input) {
InputStream inputStream = new ByteArrayInputStream(input.getBytes());
System.setIn(inputStream);
System.setOut(printStream);
}
private void runMelee() {
String input2 = "1\n1\n1\n1\n1\n11\n1\n1\n";
provideTestInput(input2);
game.playGame(); // this function repeatedly calls playMelee which takes 3 inputs at a time
}
// in Game class
void playGame() {
for(int=0;i<3;i++){
playMelee()
}
}
void playMelee() {
input = new Scanner(System.in);
for(int=0;i<3;i++){
String valueInput = input.nextLine();
}
// determine winner of game etc.
}
您的第一个扫描仪对象已刷新流中的所有数据。因此,虽然第一个实例可以为您提供令牌,但下一个实例将处理空流。
我会重新审视你们游戏的设计。首先,我会将流设置为游戏的依赖项,以便您可以为测试“硬编码”流,或在生产案例中使用
System.in
。
扫描仪也适用于您的整个游戏,这样您就不会在每次调用时重新创建它
playMelee