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

时间:2016-03-21 00:50:50

标签: java

我正在尝试阅读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()条件,但是当我完成最后一次测试时,循环不会退出。

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 个答案:

答案 0 :(得分:0)

扫描仪很好,因为看起来您想要输入特殊信息。

问题是只需在控制台中按Enter即可触发sc.next()。

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

而不是if (type.trim().equals("\n"))使用类似(type.trim().equals("exit"))

的内容