Функция 'addInOrder' должна добавлять элементы String (названия городов Австралии) в алфавитном порядке в LinkedList 'placeToVisit'.
И в соответствии с уроком, которому я следовал, функция 'addInOrder' фактически работала как задумано. Тем не менее, функция была написана таким образом, чтобы возвращать логическое значение, которое равно private static boolean addInOrder(LinkedList<String> linkedList, String newCity) {}
.
Но я хотел поэкспериментировать и решил написать функцию 'addInOrder' для возврата void, а это private static void addInOrder(LinkedList<String> linkedList, String newCity) {}
,
Но выходные данные не возвращались в алфавитном порядке, и были даже дубликаты, несмотря на использование ключевого слова break в то время как l oop.
Исходный код в соответствии с руководством был:
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