我希望程序使用地图和集打印出给定输入的邻接列表。输入本身应该是有向图,并且每条线应该是边缘。我希望用户逐个输入边缘输入,然后输入一个空行来运行程序。我无法测试是否有效,因为当我尝试运行程序并输入一个空行时,光标只会移动到下一行并且不会运行该程序。我认为它必须与我的一个while循环做一些事情,但我已经修补了一个小时左右没有运气。一切都有帮助!
import java.util.*;
public class AdjList {
public static void main(String[] args) {
Map<String, Set<String>> graph = new TreeMap<String, Set<String>>();
ArrayList<String> lines = new ArrayList<String>();
boolean control = true;
while(control == true){
Scanner in = new Scanner(System.in);
if (in.nextLine().length() == 0){
control = false;
} else {
while (in.hasNextLine()) {
lines.add(in.nextLine());
if (in.nextLine().length() == 0){
break;
}
}
for (int i = 0; i < lines.size(); i++){
String line = lines.get(i);
String[] vertices = line.split(" ");
if (graph.get(vertices[0]) == null){
Set<String> newSet = new HashSet<String>();
newSet.add(vertices[1]);
graph.put(vertices[0], newSet);
} else {
Set<String> oldSet = new HashSet<String>();
oldSet = graph.get(vertices[0]);
oldSet.add(vertices[1]);
graph.put(vertices[0], oldSet);
}
}
}
}
for(String entry : graph.keySet()) {
System.out.println(entry + ":" + graph.get(entry));
}
}
}
输入的示例是:
A B
C D
B D
E C
E B
然后输入一个空行来运行。如果您需要更多信息,请与我们联系。
答案 0 :(得分:1)
这个while循环是问题所在:
while (in.hasNextLine()) {
lines.add(in.nextLine());
if (in.nextLine().length() == 0){
break;
}
}
每次执行nextLine()
时,它都会向前移动文件指针,以便您下次使用nextLine()
时查看下一行。因此,在此while循环中,它会添加该行,移至下一行,然后检查该行是否为空。您应该保存该行,检查它是否为空,如果不是,则将其添加到您的ArrayList中,如下所示:
while (in.hasNextLine())
{
String temp = in.nextLine();
if (temp.length() == 0)
break;
else
lines.add(temp);
}
即便如此,您的代码中还有其他一些问题。例如,没有必要使用while (control == true)
循环。控件永远错误的唯一方法是第一行没有字符。我会让你自己找到其余的错误。