-2

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

好像有问题,谁能帮我看看?

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);
        }           
    }    
}
4

1 回答 1

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);
于 2013-02-20T19:49:17.097 回答