首页 文章

如何在java中找到第二大arraylist索引

提问于
浏览
-1

我必须编写一个方法,返回整数值的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;
    }

3 回答

  • 3
    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;
    }
    
  • 1

    你正在发明一个轮子 . ArrayList<Integer> intArray 包含 Contract Integers ,无需验证其元素 . 只需使用自然排序并从最后选择第二项:

    intArray.sort(Integer::compare);
    return intArray.get(intArray.size - 2);
    
  • 1
    if ( intArray.get(j) < largest ) {
        maxIndex2 = j;
    }
    

    这是你的问题 . 想想看,这段代码不会只返回第二大,它会返回一个小于最大数字的数字 .

相关问题