public static double getSmallest(ArrayList<Wert> arr) {
double small = wert.getZahl();
for (Wert wert : arr) {
if (arr.size() < 2) {
small = wert.getZahl();
} else {
if (small > wert.getZahl())
small = wert.getZahl();
}
}
return small;
}
我正在将包含值和单位的对象存储在Arraylist中。此部分应返回数组中的最小值,但始终返回0
。怎么了?
答案 0 :(得分:1)
尝试此操作,如果arraylist为0
或大小为null
,将返回0
,让我们看看您的错误
1)在for循环中删除该if
语句,您应在循环之前检查
数组列表
2)让我们假设double small = wert.getZahl();
是默认值top return
3)如果arraylist为null或为空,则返回默认值
4)或循环访问arraylist,如果任何元素小于默认值,则将其分配给small
并最终将其返回
public static double getSmallest(ArrayList<Wert> arr) {
double small = wert.getZahl();
if(arr==null || arr.isEmpty()){
return small;
}
else {
for(Wert w : arr) {
if(small>w.getZahl()) {
small=w.getZahl();
}
}
return small;
}
使用Java-8最高级
double small = arr.stream().mapToDouble(i->Double.valueOf(getZahl())).min().orElse(wert.getZahl());
答案 1 :(得分:1)
您可以使用Java8流功能来获取完整的列表统计信息。
List<Double> arr = Arrays.asList(2.0, 11.0, 13.0, 17.0, 1.5, 19.0, 23.1, 29.1);
DoubleSummaryStatistics stats = arr.stream().mapToDouble((x) -> x).summaryStatistics();
System.out.println(stats);
输出
DoubleSummaryStatistics{count=11, sum=131.600000, min=1.500000, average=11.963636, max=29.100000}
您只能获得分钟数,例如:
System.out.println(stats.getMin());
输出将是:
1.5
答案 2 :(得分:0)
您不需要检查ArrayList
的大小,仅需iterate
和check
即可:
public static double getSmallest(ArrayList<Wert> arr) {
double small = Integer.MAX_VALUE;
for (Wert wert : arr) {
if (small > wert.getZahl())
small = wert.getZahl();
}
return small;
}
或
public static double getSmallest(ArrayList<Wert> arr) {
double small = Integer.MAX_VALUE;
for (Wert wert : arr) {
small = Math.min(small, wert.getZahl());
}
return small;
}
使用Streams
的升级解决方案:
public static double getSmallest(ArrayList<Wert> arr) {
return arr.stream().map(Wert::getZahl).min(Integer::compareTo).orElse(Integer.MAX_VALUE);
}