2017-04-12 42 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

不,它不会就这样排序,并从上次获得第二个 –