排序有问题

时间:2013-05-11 21:58:42

标签: java string sorting insertion-sort

所以我在排序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) + " ");

    }
}

4 个答案:

答案 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--;
    }