【发布时间】:2020-01-25 15:47:51
【问题描述】:
'addInOrder' 函数应该按字母顺序将字符串元素(澳大利亚城市名称)添加到 LinkedList 'placesToVisit'。
根据我所遵循的教程,“addInOrder”函数实际上按预期工作。但是,该函数以返回布尔值的方式编写,即private static boolean addInOrder(LinkedList<String> linkedList, String newCity) {}。
但我想尝试并决定编写函数“addInOrder”来返回 void,即private static void addInOrder(LinkedList<String> linkedList, String newCity) {}。
但是输出没有按字母顺序返回,尽管在 while 循环中使用了 'break' 关键字,但甚至出现重复。
根据教程的原始代码是:
private static boolean addInOrder(LinkedList<String> linkedList, String newCity) {
ListIterator<String> stringListIterator = linkedList.listIterator();
while (stringListIterator.hasNext()) {
int comparison = stringListIterator.next().compareTo(newCity);
if (comparison == 0) {
System.out.println(newCity + " already listed as destination.");
return false;
} else if (comparison > 0) {
stringListIterator.previous();
stringListIterator.add(newCity);
return true;
}
}
stringListIterator.add(newCity);
return true;
}
输出:
Now visiting, Adelaide
Now visiting, Brisbane
Now visiting, Canberra
Now visiting, Darwin
Now visiting, Melbourne
Now visiting, Perth
Now visiting, Sydney
我的代码:
public class Demo {
public static void main(String[] args) {
LinkedList<String> placesToVisit = new LinkedList<>();
addInOrder(placesToVisit, "Sydney");
addInOrder(placesToVisit, "Melbourne");
addInOrder(placesToVisit, "Brisbane");
addInOrder(placesToVisit, "Perth");
addInOrder(placesToVisit, "Canberra");
addInOrder(placesToVisit, "Adelaide");
addInOrder(placesToVisit, "Darwin");
printList(placesToVisit);
}
private static void printList(LinkedList<String> linkedList) {
Iterator<String> i = linkedList.iterator();
while (i.hasNext()) {
System.out.println("Now visiting, " + i.next());
}
System.out.println("=============================");
}
private static void addInOrder(LinkedList<String> linkedList, String newCity) {
ListIterator<String> stringListIterator = linkedList.listIterator();
if (linkedList.size() == 0) {
linkedList.add(newCity);
} else {
while (stringListIterator.hasNext()) {
int comparison = stringListIterator.next().compareTo(newCity);
if (comparison == 0) {
System.out.println(newCity + " already listed as destination.");
break;
} else if (comparison > 0) {
stringListIterator.previous();
stringListIterator.add(newCity);
break;
} else if (comparison < 0) {
stringListIterator.add(newCity);
break;
}
}
linkedList.addLast(newCity);
}
}
}
输出:
Now visiting, Adelaide
Now visiting, Darwin
Now visiting, Brisbane
Now visiting, Canberra
Now visiting, Perth
Now visiting, Melbourne
Now visiting, Sydney
Now visiting, Melbourne
Now visiting, Brisbane
Now visiting, Perth
Now visiting, Canberra
Now visiting, Adelaide
Now visiting, Darwin
【问题讨论】:
-
嗨,欢迎来到 SO。您这样做是为了训练自己还是只需要城市按字母顺序排列?我的意思是,您在使用
LinkedList和ListIterator时是否有限制,或者您可以使用List的其他实现? -
原始中的最后一个添加
stringListIterator.add(newCity);仅在尚未添加城市但您一直在循环中添加它并在最后添加额外时间时才调用 -
谢谢@A.Wolf
-
谢谢@Joakim Danielson。
标签: java linked-list iterator