#java #list #sorting #linked-list
#java #Список #сортировка #связанный список
Вопрос:
У меня так много проблем с программой, над которой я работаю.
Предполагается, что программа распечатывает элементы упорядоченного связанного списка (поскольку для списка нет доступных установщиков) в алфавитном порядке. Вот что у меня есть:
GOrderedList — это узел, событие — это значение. У меня была идея попытаться найти слова и поместить их в arraylist в алфавитном порядке.
public static ArrayList <String> sortEvents (GOrderedList <Event> C){
//create arraylist
ArrayList <String> sortedList = new ArrayList <String>();
while (C.getNext()!=null){
GOrderedList <Event> first = C.getNext();
String highest = first.getValue().getname();
while (first.getNext()!=null){
if (first.getNext().getValue().getname().compareTo(highest)<0){
highest=C.getNext().getValue().getname();
}
first=first.getNext();
}
sortedList.add(highest);
C = C.getNext();
}
Это создает список, что обнадеживает, но он не в порядке. У меня была идея разместить элементы в новом ArrayList в алфавитном порядке. Я мог бы поместить элементы в ArrayList, а затем отсортировать его, но я бы предпочел этого не делать.
Комментарии:
1. Он выдает неверный вывод? Какой результат он выдает? Какой результат вы ожидали?
2. Какова иерархия GOrderedList ? Вы не можете использовать Collections.sort() ?
3. Извините, с предоставленной вами информацией у нас нет никаких шансов вам помочь. Вопросы, требующие помощи в отладке («почему этот код не работает?»), должны включать желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для ее воспроизведения в самом вопросе. Вопросы без четкой формулировки проблемы не будут полезны другим читателям.
4. Это
GOrderedList
из NYU Computer Science? Ссылка5. Это домашнее задание?
Ответ №1:
Вы можете использовать компаратор для его сортировки.Как показано ниже.
public static ArrayList<String> sortEvents(GOrderedList<Event> C) {
// create arraylist
ArrayList<String> sortedList = new ArrayList<String>();
while (true) {
GOrderedList<Event> first = C.getNext();
if (first == null) {
break;
}
String highest = first.getValue().getname();
sortedList .add(highest);
}
Collections.sort(sortedList , new Comparator<String>() {
public int compare(String f1, String f2) {
return f1.toString().compareTo(f2.toString());
}
});
return sortedList ;
};
Ответ №2:
Есть несколько проблем с кодом:
-
Вызов
getNext()
в цикле while будет увеличивать и пропускать значение каждый раз. Вероятно, вам нужно вызватьhasNext()
метод. -
Каждая итерация внешнего цикла должна добавлять свой элемент в соответствующую позицию. Как написано, добавленная стоимость всегда будет в конце.
Как упоминалось ранее, существуют стандартные способы сделать это, но я предполагаю, что вам нужно сделать это в качестве упражнения. Если нет, используйте компаратор. Естественное сравнение строк может дать вам именно то, что вы хотите.
Комментарии:
1. Для 1., если я правильно угадал
GOrderedList
,getNext()
не продвигается, просто возвращает ссылку на следующий узел (или null). Для 2., если список уже упорядочен, как следует из названия класса, это проблема только в том случае, если требуется другой порядок. Я бы хотел, чтобы OP сказал нам.2. Вы правы в том, что GetNext() не продвигается вперед и возвращает только ссылку. Список уже упорядочен и не может быть переупорядочен сам по себе, но должен быть напечатан в алфавитном порядке, отсюда и вопрос. У меня была идея разместить элементы в новом ArrayList в алфавитном порядке. Я мог бы поместить элементы в ArrayList, а затем отсортировать его, но я бы предпочел этого не делать.