Проблемы с сортировкой

58
6

Поэтому у меня проблема с сортировкой ArrayList. Я должен использовать в методе вставки, поэтому я пишу этот код, основываясь на этом. Для этого необходимо, чтобы пользователь вводил 4 3-буквенных слова, а затем сортировал их в ArrayList в алфавитном порядке. Я пробовал разные вещи, но когда я запускаю код, он сортирует первое слово, но повторяет его. Выход действительно зависит от слов, которые я поставил. Я чувствую, что моя проблема в цикле while, но я пытаюсь по-разному, но у меня такая же проблема. Любая помощь приветствуется.

import java.util.ArrayList;
import TerminalIO.KeyboardReader;

public class Insert{
public static void main(String[] args) {
int i,j;
String tmp;
ArrayList<String> words = new ArrayList<String>();
int run = 4;
KeyboardReader reader = new KeyboardReader();
while(run!=0) {
words.add(reader.readLine("Enter a three letter word: "));
run--;
}

for (j=1; j<words.size(); j++) {
i = j - 1;
tmp = words.get(j);

while ( (i>=0) && (tmp.compareTo(words.get(i)) < 0)){
words.set(i,tmp);
words.set(i+1,words.get(i));
i--;
}

//words.set(i+1,tmp);

}

for(int r = 0; r<words.size(); r++)
System.out.print(words.get(r) + " ");

}
}

спросил(а) 2013-05-12T00:58:00+04:00 7 лет, 5 месяцев назад
1
Решение
58

Причина, по которой вы получаете дублирующиеся слова, - это блок while:

while ( (i>=0) && (tmp.compareTo(words.get(i)) < 0)){
words.set(i,tmp);
words.set(i+1,words.get(i));
i--;
}

Вы устанавливаете слово i -th в tmp, а затем вы устанавливаете слово i+1 -th слову i -th, который является tmp.

Боюсь, у вас тоже проблемы с организацией кода. Во-первых, попробуйте создать объект Insert, а затем вызвать методы. Сделайте ваши методы меньше; каждый метод должен делать только одно.

ответил(а) 2013-05-12T01:09:00+04:00 7 лет, 5 месяцев назад
41

Если вам нужно сделать это именно так, вам нужно использовать переменную String во втором цикле while, позвольте ей вызвать tmp2:

   while ( (i>=0) && (tmp.compareTo(words.get(i)) < 0)){
tmp2 = words.get(i);
words.set(i,tmp);
words.set(i+1,tmp2);
i--;
}

ответил(а) 2013-05-12T01:55:00+04:00 7 лет, 5 месяцев назад
42

java.util.Collections.sort(list) сортирует массив в естественном порядке его элементов, пока элементы внедряют интерфейс Compareable.

ответил(а) 2013-05-12T01:10:00+04:00 7 лет, 5 месяцев назад
42

Почему бы просто не использовать Collections.sort вместо сортировки. Это будет выглядеть так после цикла while:

 while(run!=0){
words.add(reader.readLine("Enter a three letter word: "));
run--;
}
Collections.sort(words);

ответил(а) 2013-05-12T01:09:00+04:00 7 лет, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема