2017-04-12 70 views
-1

我必須編寫一個方法,該方法返回整數值ArrayList的第二大索引。如何在java中查找arraylist的第二大索引

陣列列表是: 4 8 15 16 23 42 97 56 95 85 63 41 52 99 97 Q

的Q是有標記的輸入的結束。我正在使用fileIn.hasNextInt()來讀取輸入並檢查它是否是整數。

我的邏輯問題是它只循環訪問ArrayList並返回ArrayList的最後一個索引而不是第二大值的索引。

這裏是我的代碼:

public static int secondMaxIndex(ArrayList<Integer> intArray){ 
     int largest = intArray.get(0); 
     int largest2 = intArray.get(0); 
     int maxIndex2 = 0; 
     for(int i = 0; i <= intArray.size() - 1; i++){ 
      if(largest < intArray.get(i)){ 
       largest = intArray.get(i); 
      } 
     } 
     for(int j = 0; j <= intArray.size() - 1; j++){ 
      if(intArray.get(j) < largest){ 
       maxIndex2 = j; 
      } 
     } 
     return maxIndex2; 
    } 
+0

不錯的使用迷失號碼。 =) –

+0

你的第二個for循環遍歷整個數組並返回小於第一個循環中已找到的最大值的最後一個值 –

回答

1
public static int secondMaxIndex(ArrayList<Integer> intArray) 
    { 
    int largest = intArray.get(0); 
    Integer largest2 = null; 
    int maxIndex = 0; 
    int maxIndex2 = 0; 

    for(int i = 0; i < intArray.size() ; i++) 
    { 
     if(largest < intArray.get(i)) 
     { 
      largest2 = largest; 
      maxIndex2 = maxIndex; 
      largest = intArray.get(i); 
      maxIndex = i; 
     } 
     else if(largest2 == null || intArray.get(i) > largest2) 
     { 
      largest2 = intArray.get(i); 
      maxIndex2 = i; 
     } 
    } 

    return maxIndex2; 
} 
+0

這不適用於陣列列表:99 98 97 96 95 94 93 92 91 90 Q – izzleskizzle

+0

Ups對不起,你是正確的只是初始化第二大爲0如果所有的數字都是正數 –

+0

或者更簡單的方法,你可以將它設置爲空和在else if語句之前有另一個else如果你把它分配給getindex(I),如果largest2爲null –

1
if (intArray.get(j) < largest) { 
    maxIndex2 = j; 
} 

這是你的問題。想想看,這段代碼不會只返回第二大碼,它會返回一個小於最大號碼的號碼。

+0

我不知道要設置什麼值作爲obatin我看的值的下限爲陣列列表中的最大值和第二大值之間的值。 – izzleskizzle

3

您正在發明一個車輪。 ArrayList<Integer> intArray包含Integers通過合同,不需要驗證其元素。 只需使用自然分類並從結尾挑選第二項:

intArray.sort(Integer::compare); 
return intArray.get(intArray.size - 2); 
+0

會工作嗎? – izzleskizzle

+0

不,它不會就這樣排序,並從上次獲得第二個 –