我一直在尝试实现Dijkstra算法。以下是读取输入的代码:
System.out.println("Enter the number of Cities ");
int no_Of_Cities = scannerObj.nextInt();
List<Vertex> Vertices = new ArrayList<Vertex>(no_Of_Cities) ;
for (int itr = 0; itr < no_Of_Cities; itr++){
System.out.println("Enter the details for city "+itr+": ");
System.out.println("Name of the vertex: ");
String name = new String(scannerObj.nextLine());
Vertex vertexObj = new Vertex(name);
Vertices.add(vertexObj);
}
display(Vertices);
,显示功能如下:
public static void display(List<Vertex> vertices){
int length = vertices.size();
for(int i =0;i<length;i++){
System.out.println();
System.out.println("Entry for i ="+i+" is: "+vertices.get(i).getName());
}
}
当我尝试执行代码时,以下是我得到的输出:
输入城市数量 3
输入城市0的详细信息:
顶点的名称: 一个
请输入城市1的详细信息:
顶点的名称: B'/ P>
请输入城市2的详细信息:
顶点的名称: ç
i = 0的条目是:
i = 1的条目是:a
i = 2的条目是:b
任何人都可以解释我犯错误的地方吗?
注意:Vertex是另一个类,它只保存顶点的必要细节,如名称和边数组。
答案 0 :(得分:3)
添加scannerObj.nextLine();
后
int no_Of_Cities = scannerObj.nextInt();
这将消耗包含您刚读取的int的行的结尾,并防止在您第一次调用String name = new String(scannerObj.nextLine());
答案 1 :(得分:0)
String name = new String(scannerObj.nextLine());
此行导致问题,因为它导致输入跳到下一行,从而跳过城市0的输入。
使用此代码它将起作用 - : String name = new String(scannerObj.next());