当前位置: 首页 > 知识库问答 >
问题:

扫描仪被跳过

韦俊英
2023-03-14

我试图从用户那里得到2个整数。这是我的代码的相关部分:

 public void play() {

        int row=0,col=0;
        initializeboard();
        printboard();

        do {

            currentPlayer = players.remove();  //Returns currentPlayer
            System.out.println("Ok, "+ currentPlayer.getname() + ", Enter your Move: Row[1-3] & Column[1-3]");
            Scanner choice = new Scanner(System.in);
            if (choice.hasNext()) {

                row = choice.nextInt();
                col = choice.nextInt();
                while (row<1 || row>3 || col<1 || col>3 || board[row-1][col-1] != '-' ) {
                    System.out.println("Well, Move is not Valid or has already Been Selected, Try Again :/");
                    row = choice.nextInt();
                    col = choice.nextInt();
                }
                choice.close();
            }

            board[row][col] = currentPlayer.getsign(); //Places Sign in Game Board
            printboard();
            System.out.println();
            players.append(currentPlayer); //Inserts the Next Player
        } while(!win() && !isFull());
}

起初,它抛出一个NoSuchelementException,所以我使用了.hasnext()。现在,它只需跳过扫描器并立即调用printboard()

共有1个答案

谭浩皛
2023-03-14

问题是创建并关闭具有相同流的多个扫描程序对象。

Peter Lawrey在这篇文章中的回答解释了为什么不应该从同一个流中创建多个scanner对象。以下是答案中的一句话:

一旦您关闭了一个流,它就关闭了基础流,您就不能再使用它了。如果你想防止它再次被使用,只关闭系统

static final Scanner scan = new Scanner(System.in);
 类似资料:
  • 问题内容: 我的Java作业有问题。我遇到了意外的异常,特别是: java.util.NoSuchElementException:找不到行 我正在使用,该程序不断读取任何内容,并重复“无效格式”异常文本。如果输入正确的值,则第一部分通过,然后该部分立即进入此异常。如果输入的值不正确,则它将开始循环异常。 这是我的代码: 问题答案: 您关闭了多个库,这些库关闭了底层库,因此另一个库将不再从同一库和

  • 问题内容: 使用Scanner类中的useDelimiter时遇到一些问题。 如果我有这个输入 美国广播公司 输出将是 AB 然后等到我键入另一个“-”以打印出最后一个字符 但是,如果我没有用户输入数据,而是将字符串插入到Scanner中,则代码将起作用。原因是什么?如何解决?我不想使用StringTokenzier 问题答案: 如果没有等待您输入另一个,则将错误地假定您已完成输入。 我的意思是,

  • 我做了一个程序,要求3个整数来输出三角形的类型。所有内容都成功运行和编译,但是,在要求用户查看是否要再次循环的部分,联机编译器会输出错误: 异常线程"main"java.util.NoSuchElement异常在java.util.Scanner.throwFor(Scanner.java:838)在java.util.Scanner.next(Scanner.java:1347)在Assignm

  • 问题内容: 如何将扫描仪的定界符设置为;或换行? 我试过: 但这不起作用。 问题答案: 通常,在模式中,您需要将翻倍。 所以,尝试 要么 编辑 :如果是问题,则可能要尝试以下操作: 它匹配的一个或多个,和。 注意 :我还没有尝试过这些。

  • 问题内容: 我有一个创建多个对象并将其放入一个类的类,如下所示: 我有一个从控制台扫描输入“ add”的应用程序,如果找到该应用程序,则调用如下所示的方法: 该应用程序应允许用户根据需要多次输入“添加”,但是在add调用该方法后将出现错误“找不到行” 。 我猜这是因为方法中的尚未关闭,然后在需要时重新打开。这是程序的问题吗?如果是,我将如何修复它? 请注意,该程序尚未完成,因为我将添加一种出售这些

  • 问题内容: 我正在尝试读取具有多个单词的字符串,即。洛杉矶或纽约市。如果有两个词并将它们分割在变量之间,则使用scanner.next()进行“出发”和“到达”只会读取第一个。nextLine()也不是很幸运。这是我的代码: 我知道这很简单,但我还没有弄清楚。 这是上面的代码的输入/输出: 输入航班号:29 输入出发城市:(立即跳至下一行) 输入到达城市: -—我真正想要的是---- 输入航班号: