到目前为止,我有这个方法,它应该找到ArrayList的最大年龄。但是,在我的数据中,我有两个值,联合最大值为58。如何从这个循环获得第二个58?第一个58的索引是1,但我需要的索引是4.我不能硬编码。
public static int maxAge (ArrayList<Integer> ages) {
int hold = 0;
int max = 0;
for (int i = 0; i < ages.size(); i++) {
if (max < ages.get(i)) {
max = ages.get(i);
hold = i;
}
else i++;
}
return hold;
}
答案 0 :(得分:2)
您可以简单地将条件更改为:
if (max <= ages.get(i))
答案 1 :(得分:0)
这取决于你为什么想要其他58.如果你想返回最新的比赛,你可以向后循环。
答案 2 :(得分:0)
下面的代码将使您能够返回与列表的最大值相关联的所有索引。但是你必须在Java 8上运行它,因为它使用Lambda Expressions。
public static ArrayList<Integer> maxAge (ArrayList<Integer> ages ) {
int max = 0;
ArrayList<Integer> maxIndexes = new ArrayList<Integer>() ;
for (int i = 0; i < ages.size(); i++) {
if (max <= ages.get(i)) {
final int finalMax = max ;
final int finalIndex = i ;
maxIndexes.removeIf((elt)-> finalMax < ages.get(finalIndex)) ;
maxIndexes.add(i) ;
max = ages.get(i) ;
}
}
return maxIndexes ;
}
答案 3 :(得分:0)
我知道,很难看。但我会尝试编写一个功能版本。
Optional<Integer> max = ages.stream()
.max(Integer::compare);
if (max.isPresent()) {
return IntStream.range(0, ages.size())
.mapToObj(pos -> {
return new int[] {pos, ages.get(pos)};
})
.filter(pair -> pair[1] == max.get())
.collect(Collectors.toCollection(LinkedList::new))
.getLast()[0];
} else
return 0;
答案 4 :(得分:0)
有多种方法可以更改条件以符合您的描述。试试这个:
Foo