【发布时间】:2013-11-26 22:27:35
【问题描述】:
我有一个ArrayList 的对象,我需要找到最大值。这种情况实际上与此处相同(best way to find maximum age element of List)。 Ian Bishop 的回答很适合,但是当 n 个对象的年龄相同时,我需要说没有最大值并打印 "Equals" + maxAge。
如何修改这段代码来实现这一点?
【问题讨论】:
我有一个ArrayList 的对象,我需要找到最大值。这种情况实际上与此处相同(best way to find maximum age element of List)。 Ian Bishop 的回答很适合,但是当 n 个对象的年龄相同时,我需要说没有最大值并打印 "Equals" + maxAge。
如何修改这段代码来实现这一点?
【问题讨论】:
使用额外的boolean 来检查怎么样:
Man maxAge = new Man(0);
boolean isAmaxFoud = false;
for(Man man : list) {
if(man.age > maxAge.age) {
maxAge = man;
isAmaxFound = true;
}
}
if(!isAmaxFound) // <<--- all age are equal
print "Equals "+list.get(0)
else print maxAge
【讨论】:
如果您只需要一次获取最大值,请遍历列表并跟踪到目前为止的最大值。如果您还保留boolean 以告知您是否多次看到最大值,并在找到新最大值时将其设置为 false 并在找到等于最大值时将其设置为 true,那么应该可以。
【讨论】:
您可以对已接受的答案进行简单修改:
Man maxAge = null;
boolean unique = true;
for(Man man : list) {
if (maxAge == null) {
maxAge = man;
unique = true;
} else if (man.age > maxAge.age) {
maxAge = man;
unique = true;
} else if (man.age == maxAge.age) {
unique = false;
}
}
if (maxAge == null) {
System.out.println("Empty list!");
} else {
if (unique) {
System.out.println("Max age: " + maxAge.age);
} else {
System.out.println("Max age is not unique; equals " + maxAge.age);
}
}
【讨论】: