0

我正在尝试按字典顺序或字母顺序打印数组中的第二大元素。pop确实是第二大的。然而; 当我测试另一组数组时,我的代码不是我想的那样设计的,显然我只打印最后一个元素。关于我哪里出错的任何建议?

import java.util.ArrayList;
public class test {
public static void main(String[] args)
{
    ArrayList<String> list = new ArrayList<String>();
    list.add("bob");
    list.add("mill");
    list.add("sun");
    list.add("opera");
    list.add("bun");
    list.add("pop");
    System.out.println("list: " + list);
    String s = list.get(0);
    for ( int i = 0; i < list.size() - 1; i++) {
        if (list.get(i).compareTo(list.get(i + 1)) > 0) {
            s = list.get(i);
            list.set(i, list.get(i + 1));   
        } else if (list.get(i).compareTo(list.get(i + 1)) < 0) {
            s = list.get(i + 1);
        }
    }
    System.out.println("second largest: " + s);
}
}
4

1 回答 1

0

我建议使用以下伪代码来打印第二大元素:

element largest = ""
element secondlargest = ""
for each element in list:
   if element > largest:
      secondlargest = largest
      largest = element
   else if element > secondlargest:
      secondlargest = element
print secondlargest

(如果您希望将其扩展为能够打印第三个、第四个或第 n 个元素,更智能的方法会更好 - 在极端情况下,您只需创建列表的排序副本并从末尾返回第 n 个项目)

于 2013-04-15T22:54:39.950 回答