所以我在排序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) + " ");
}
}
答案 0 :(得分:1)
您最终得到重复字词的原因是while
块:
while ( (i>=0) && (tmp.compareTo(words.get(i)) < 0)){
words.set(i,tmp);
words.set(i+1,words.get(i));
i--;
}
您将i
个单词设置为tmp
,然后将i+1
个单词设置为i
个单词,即{{1} }}
我担心你也会遇到一些代码组织问题。首先,请尝试实际创建一个Insert对象,然后在其上调用方法。让你的方法更小;每种方法都应该只做一件事。
答案 1 :(得分:0)
为什么不使用Collections.sort
而不是自己排序。在你的while循环之后,这将是这样的:
while(run!=0){
words.add(reader.readLine("Enter a three letter word: "));
run--;
}
Collections.sort(words);
答案 2 :(得分:0)
java.util.Collections.sort(list)
只要元素实现Compareable接口,就会按照元素的自然顺序对数组进行排序。
答案 3 :(得分:0)
如果您需要以这种特殊方式执行此操作,则需要在第二个while循环中使用String变量,我们将其称为tmp2:
while ( (i>=0) && (tmp.compareTo(words.get(i)) < 0)){
tmp2 = words.get(i);
words.set(i,tmp);
words.set(i+1,tmp2);
i--;
}