2013-04-15 39 views
0

我試圖按字典順序或按字母順序打印數組中的第二大元素。流行音樂的確是第二大的。然而;我的代碼沒有按照我想到的方式設計,當我測試另一組數組時,顯然我只打印最後一個元素。任何關於我出錯的建議?按字典順序獲取第二大元素

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); 
} 
} 
+0

我編輯了代碼的空白以方便閱讀。 – Patashu

+0

你爲什麼要改變列表本身? –

+0

更改列表?你的意思是我爲什麼要添加到列表中? – qvd

回答

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項)

+0

謝謝,我對數字做了同樣的事情,但是;我想我的字符串有問題。 – qvd

+0

@qvd這是完全相同的僞代碼,除了你需要做詞典比較(比較和測試值,例如) – Patashu