我正在尝试从System.in读取。
输入是这种类型的:
第一个数字是测试用例的数量,然后是整数,然后是几行。

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) );
    }
}

最佳答案

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

问题是sc.next()不会仅通过在控制台中按Enter来触发。

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

代替if (type.trim().equals("\n"))使用类似(type.trim().equals("exit"))的东西

关于java - 没有更多行可读取时,扫描仪停止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36121533/

10-10 10:52