2

您的程序应该读取一个输入文件(程序的第一个参数)。第一行包含数字“N”的值,后跟多行。您可以假设输入文件的格式正确,并且第一行的数字(即“N”)是有效的正整数。例如

这是我的输入:

2
你好世界

CodeEval
Quick Fox
A
旧金山

期望的输出应该是:

旧金山
你好世界

这是我的代码:

 class Longest
 {
public static void main(String args[]) throws FileNotFoundException  
{
    BufferedReader in = null;
    List<String> myList = new ArrayList<String>();
    try 
    {   
        in = new BufferedReader(new FileReader("C:\\filename.txt"));
        String str;
        while ((str = in.readLine()) != null) 
        {
            if (str.length() == 0) continue;                                

            myList.add(str);
        }
    } 
    catch (IOException e) 
    {
        e.printStackTrace();
    } 
    System.out.println("Contents of the ArrayList : "+myList);
    System.out.println("Size of the ArrayList : "+myList.size());
    String s = myList.remove(0);
    System.out.println(System.getProperty("line.separator"));
    System.out.println("Number of lines to be printed : "+s);
    System.out.println("After removing first element of ArrayList : "+myList);
    System.out.println("Size of the ArrayList : "+myList.size());               

    Comparator comparator=Collections.reverseOrder();                   
    Collections.sort(myList,comparator);
    System.out.println("After sorting ArrayList in Descending Order :"+myList);


    int x = Integer.parseInt(s);
    System.out.println(System.getProperty("line.separator"));


for (String s1 : myList) {
System.out.println(s1);
}
System.out.println(System.getProperty("line.separator"));

for(int i=0; i<x; i++){
        System.out.println(myList.get(i));
    }

}   

}

但我得到这个输出:

旧金山
快狐

我哪里错了?

4

2 回答 2

11

Tje 默认排序,将根据字母索引对列表进行排序。如果您想对其他标准进行排序,例如您的案例中的长度,您必须实现自己的Comparator

    Comparator<String> x = new Comparator<String>()
    {
        @Override
        public int compare(String o1, String o2)
        {
            if(o1.length() > o2.length())
                return -1;

            if(o2.length() > o1.length())
                return 1;

            return 0;
        }
    };

    Collections.sort(mylist,  x);
于 2013-06-29T08:44:22.263 回答
0

在您的代码中,您只需删除列表中的第一项(myList)。列表的大小将是 4。然后你以相反的顺序对列表进行排序,你得到输出是正常的:

San Francisco
Quick Fox
Hello World
CodeEval
A

据我所见,您刚刚删除了第一个元素,因此您的输出将包含 5 个元素。我不明白您为什么要获得所需的输出。输出按字母顺序颠倒。

于 2013-06-29T08:43:30.707 回答