我正在尝试使用for
循环来比较int
中ArrayList
之间的差异。因此,我需要有一个任意大的初始变量,任何差异都必须小于该初始变量。这是最小的可行示例:
List<Integer> l = new ArrayList<>();
l.add(5);
l.add(1);
// ...etc
Collections.sort(l);
int diff = 0;
int minDiff = 100;
for (int i = 1; i < l.size(); i++) {
diff = l.get(i) - l.get(i-1);
if (diff < minDiff) minDiff = diff;
}
我的问题是在diff
大于minDiff
的情况下。是否有一种解决方案,可以分配> 100
使其小于其他minDiff
?谢谢!
答案 0 :(得分:3)
我将其设置为可能的最大整数值:
int minDiff = Integer.MAX_VALUE;
与之相比,一切都会变小。
答案 1 :(得分:0)
实际上,如果您将diff
的初始值分配为List<Integer> l
的两个初始值之差,则无需考虑。并将初始迭代索引i
增加到2
。
int minDiff = 100;
int diff = l.get(1) - l.get(0);
for (int i = 2; i < l.size(); i++) {
diff = l.get(i) - l.get(i-1);
if (diff < minDiff) minDiff = diff;
}
此解决方案建议该列表至少包含3
个元素。
或者,尝试使用Stream-API来完全替代for-loop
和辅助变量diff
:
int minDiff = IntStream.range(0, l.size() - 1)) // 0...n-1 iteration
.map(index -> l.get(index + 1) - l.get(index)) // output differences
.min().getAsInt(); // finds the minimum
答案 2 :(得分:0)
使用流:
int minDiff = IntStream.range(1, l.size())
.map(i -> l.get(i) - l.get(i-1))
.mapToInt()
.min().getAsInt();