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

当没有更多行可读取时,扫描仪停止

东门玺
2023-03-14

我正在尝试从系统中读取。输入是这样的:第一个数字是测试用例的数量,然后是整数,然后是一些行。

2

10
c 1 5
c 2 7
q 7 1

1
q 1 1
c 1 1
q 1 1

问题是,尽管循环中存在sc.hasNext()条件,但当我完成最后一个测试时,while循环不会退出。

public static void main(String[] args){

    Scanner sc = new Scanner(System.in);

    int testCases = sc.nextInt();

    for(int i=0;i<testCases; i++){
        int numberOfQuestions = 0;
        int numberOfSuccessufulQuestions = 0;
        int computerNumber = sc.nextInt();
        Graph g = new Graph();

        while(!sc.hasNextInt() && sc.hasNext()){
            String type = sc.next();
            if (type.trim().equals("\n"))
                break;
            if(type.equals("c")){
                int a = sc.nextInt();
                int b = sc.nextInt();
                g.setEdge(a, b);
            }else if(type.equals("q")){
                visited = new HashMap<>();
                int a = sc.nextInt();
                int b = sc.nextInt();
                numberOfQuestions++;
                if(a == b){
                    numberOfSuccessufulQuestions++;
                }
                else if(g.isNodeExist(a) && g.isNodeExist(b)){
                    if(connected(g, a, b)){
                        numberOfSuccessufulQuestions++;
                    }
                }   
            }  
        }

        System.out.println(numberOfSuccessufulQuestions+ ","+ (numberOfQuestions - numberOfSuccessufulQuestions) );
    }
} 

共有1个答案

娄振
2023-03-14

扫描仪很好,因为它看起来像是要输入临时信息。

问题是sc.next()不会被控制台中简单的回车键触发。

我在这里看到的用命令终止循环的解决方案。

而不是如果(type.trim(). equals(\n))使用类似于(type.trim(). equals(退出))

 类似资料:
  • 问题内容: 编辑 以便进一步阅读:问题是我的输入文件已损坏。 我不明白我在做什么错: 我正在使用此代码: 哪个工作正常。现在,由于某种原因,我想换一个扫描仪。我的代码变成: 这次,我们从不输入while,因为r.hasNextLine()始终返回“ false”。关于我在做什么错的任何想法吗? 我精确地说,没有其他更改,文件仍然相同。 编辑 :我还精确地我尝试了另一个文件,并得到相同的结果,这意味

  • 问题内容: 我正在尝试做的是拥有多个具有不同变量的输入。每个变量将是不同方程式的一部分。我正在寻找一种方法来做,我想我有一个主意。我只想知道这是否合法,也许还有更好的方法。 问题答案: 如果每个输入都问相同的问题,则应使用循环和输入数组: 或者如Chip所建议的,您可以从一行中解析输入: 您在正确的轨道上,所做的工作正常。这只是一种更好,更灵活的处理方式。

  • 问题内容: 我正在玩Scanner类,以进行学习,并且我使用它来读取非常大的文件(大约60.000行,大约不使用Reader类),并且在大约400行后停止读取。我是否必须在Scanner的构造函数中使用Bufferedreader还是问题?我想知道为什么会这样。谢谢。我的代码是输出所有行的常用代码。 问题答案: 此问题通常在64位计算机上或文件大小大于1-2 GB的文件中更常见,并且与堆空间无关。

  • 我想在我的代码中手动读取一些值。除了最后一个(lambda2)之外,它对所有值都有效。我可以无限地继续键入值,即使它们不是双精度的,也不会发生任何事情。如果我用任何其他值键入其他值,我会收到一条错误消息,以及第一次输入lambda2时的错误消息。我在另一个代码中以类似的方式(最终只创建了一个不同的对象)进行了操作,并且效果很好。

  • 我有麻烦更新一个变量的名称为一个对象使用扫描器。我提供一个菜单给用户,用户选择他的选择(更新名称),程序要求用户输入新的名称,扫描器读取system.in并更新变量的名称。唯一的问题是程序不能读取带有空格的字符串。例如: 如果键入类似的内容,则可以执行此操作,但如果键入,则将得到,输出示例如下 所以我猜它只读取t,当扫描器扫描shipProperty值时,它读取dog而不是等待输入。我读过关于的文