为这段代码提供以下输入:
5
0 4 15
1 0 14 2 7 3 23
2 0 7
3 1 23 4 16
4 2 15 3 9
问题是,每当行号为奇数时,第一个整数将不会按预期由“
String newVertexID = inputs.next("\\d+");
”读取,而是由“System.out.println("next: " + inputs.next("\\d+"))
”读取,即 0、2、4 被分配给 newVertexID,如下所示预期的,但 1, 3 被传递给第二个打印语句,这不是我想要的。
我最初认为这是因为每行末尾的换行符导致了问题,但我已经尝试了很多事情(我注释掉的所有内容都是我尝试过的),我现在已经开始去怀疑它。请帮我找出原因吗?
Graph graph = new Graph();
Scanner inputs = new Scanner(System.in);
int vertexCounts = inputs.nextInt();
// inputs.nextLine();
for (int i = 0; i < vertexCounts; i++){
// inputs.nextLine();
inputs.skip("\n");
String newVertexID = inputs.next("\\d+");
System.out.println(newVertexID);
Vertex newVertex = new Vertex(newVertexID);
graph.addVertex(newVertex);
while(inputs.hasNextInt()){
System.out.println("Why are you running");
System.out.println("next: " + inputs.next("\\d+"));
System.out.println(inputs.nextInt());
// graph.addEdge(newVertexID, inputs.next(), inputs.nextInt());
}
// inputs.nextLine();
}
谢谢你
像这样尝试一下。这是使用两个扫描仪有用的少数情况之一,一个用于读取该行,另一个用于解析该行。我添加了一些输出增强功能。
Scanner inputs = new Scanner(System.in);
int vertexCounts = inputs.nextInt();
inputs.nextLine(); // remove extra cr in input buffer.
System.out.println(vertexCounts);
for (int i = 0; i < vertexCounts; i++){
String line = inputs.nextLine();
System.out.println(line);
Scanner parseLine = new Scanner(line.trim());
int vertexID = parseLine.nextInt();
System.out.println("vertexID = " + vertexID);
while(parseLine.hasNextInt()){
System.out.println("Why are you running");
System.out.println("next: " + parseLine.nextInt());
// graph.addEdge(newVertexID, inputs.next(), inputs.nextInt());
}
}