我正在尝试阅读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) );
}
}
答案 0 :(得分:0)
扫描仪很好,因为看起来您想要输入特殊信息。
问题是只需在控制台中按Enter即可触发sc.next()。
我在这里看到的解决方案是用命令终止循环。
而不是if (type.trim().equals("\n"))
使用类似(type.trim().equals("exit"))