试图对字符串数组进行排序

时间:2013-02-20 19:16:26

标签: java

我编写了以下程序来对输入字符串进行排序,并输出按字典顺序排序的列表。

它似乎有问题,有人可以帮我找到吗?

import java.util.ArrayList;
import java.util.Scanner;

public class Problem3 
{
    public static void main(String[] args) 
    {
        Scanner scanner = new Scanner(System.in);
        String statement = scanner.nextLine();
        screen(statement);
    }
    public static void screen(String statement)  // sorting mechanism 
    {
        String token[]= statement.split(" ");
        String smallestSoFar=token[0]; 
        ArrayList<String> list = new ArrayList<String>();
        for(int i=0; i<token.length;i++)
        {
            smallestSoFar=token[i];
            for(int e=i; e<token.length; e++)
            {
                if(token[e].compareTo(smallestSoFar)<0)  // inputting the // ...lexicographically sorted word into a new list
                {
                    smallestSoFar=token[e]; 
                    list.add(smallestSoFar);                
                }
            }
            System.out.println(list);
        }           
    }    
}

1 个答案:

答案 0 :(得分:1)

问题是,如果任何元素后跟一个较小的元素,它将不会被打印出来(并且较大的元素将被打印两次)。而且您的打印位置错误(应该在循环之后)。

您只需使用

即可
Arrays.sort(token)

list = new ArrayList<String>(Arrays.asList(token));
Collections.sort(list);

对数组进行排序。

如果你想坚持自己的方式,我就是这样做的:

boolean[] checked = new boolean[token.length];
int checkedCount = 0;
while (checkedCount < token.length)
{
    int smallestIndex = -1;
    for(int i = 0; i < token.length; i++)
    {
        if (!checked[i] &&
            (smallestIndex == -1 || token[i].compareTo(token[smallestIndex]) < 0))
        {
            smallestIndex = i;
        }
    }
    checked[smallestIndex] = true;
    checkedCount++;
    list.add(token[smallestIndex]);
}
System.out.println(list);