Java Scanner 类嵌套调用输入不适用于后续调用

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

下面是我用来测试游戏的两个测试函数。我的问题是,我的输入将适用于 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.
}
java arrays input cucumber java.util.scanner
1个回答
0
投票

您的第一个扫描仪对象已刷新流中的所有数据。因此,虽然第一个实例可以为您提供令牌,但下一个实例将处理空流。

我会重新审视你们游戏的设计。首先,我会将流设置为游戏的依赖项,以便您可以为测试“硬编码”流,或在生产案例中使用

System.in

扫描仪也适用于您的整个游戏,这样您就不会在每次调用时重新创建它

playMelee

© www.soinside.com 2019 - 2024. All rights reserved.