我正在尝试从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/