我必须编写一个返回整数值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 :(得分:3)
你正在发明一个轮子。
ArrayList<Integer> intArray
按合同包含Integers
,无需验证其元素。
只需使用自然排序并从最后选择第二项:
intArray.sort(Integer::compare);
return intArray.get(intArray.size - 2);
答案 1 :(得分:1)
if ( intArray.get(j) < largest ) {
maxIndex2 = j;
}
这是你的问题。想想看,这段代码不会只返回第二大,它会返回一个小于最大数字的数字。
答案 2 :(得分: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;
}