我设置了一个Java方法,它接受包含整数值的新Measurable
个对象,并将它们添加到ArrayList
。添加它们后,将每个新项目与任何现有值进行比较,以确定新项目是否应归类为“最小”数字或“最大”数字。我知道ArrayLists
可以采用任何数据类型,因此我的代码的当前格式是错误的。但是,我不确定如何比较它们。任何帮助将不胜感激。
public void add(Measurable newItem) {
list.add(newItem);
if (min == null || min > newItem) {
min = newItem;
}
else if (newItem > min) {
max = newItem;
}
}
答案 0 :(得分:1)
一种解决方案是始终跟踪最小值和最大值Measurable
。这样,您每次添加list
时都不需要循环newItem
,而只是直接将其与这些最小值和最大值进行比较。
示例:如果newItem
小于currentMin
,则currentMin = newItem
。同样适用于currentMax
。
当然你需要实现"少于"操作,因为你正在处理对象。您可以按照PM 77-1的建议使用compareTo()
。
答案 1 :(得分:1)
应更正max
代码的方法部分:
public void add(Measurable newItem) {
list.add(newItem);
if (min == null || min > newItem) {
min = newItem;
}
if (max == null || newItem > max) {
max = newItem;
}
}
如果Measurable
类实现Comparable
接口,则可以将其写为
public void add(Measurable newItem) {
list.add(newItem);
if (min == null || newItem.compareTo(min) < 0) {
min = newItem;
}
if (newItem.compareTo(max) > 0) {
max = newItem;
}
}
可比示例here
答案 2 :(得分:1)
为什么要比较列表中的每个对象?如果要查找列表的最小值,请使用:
min = Collections.min(list,comparator);
找到最大值:
max = Collections.max(list,comparator);
如果要比较measurable
,比如说它的实例变量int length,请创建一个自定义比较器:
myComp extends Comparator<measurable>
{
public int compare(measurable1,measurable2)
{
//compare measurable1.length and measurable2.length and return -1,1 or 0
}
}
答案 3 :(得分:0)
将min > newItem
替换为min.compareTo(newItem) > 0
您的代码建议您已跟踪列表的min
和max
值。但我认为你的代码在行
else if ( newItem > min) { ...
应该是
else if (max == null || newItem.compareTo(max) > 0) { ...