我学习Java并且作为我工作的一部分要求我能够做一些事情,比如计算数组中的值范围(max - min + 1)。我不允许使用collections.min(array)之类的方法。到目前为止,我的解决方案是这样的:
public static int range(int[] data){
int min = 99999999;
int max = 0;
int test = 0;
int range = 0;
for (int i = 0; i < data.length; i++){
test = data[i];
if (test > max)
max = test;
if (test < min)
min = test;
}
range = (max - min) + 1;
return range;
}
虽然它适用于它们但它并不特别优雅。最小值为9999999有效但如果我使用大于此值的数字时遇到问题,则无法正常工作。
我觉得应该有一个更好的解决方案,但我没有找到一种方法来找到最小值而不将我的int min设置为非常高的值。否则,数组可能具有非常大的数字,并且最小值永远不会改变,因为数组中的值总是大于它。
答案 0 :(得分:0)
此方法返回至少一个元素的所有非null数组的范围,否则抛出IllegalArgumentException
。这是通过max >= min
的完整性检查来完成的,如果true
和min
的原始初始化值不变,则max
仅为for
。只有在跳过int
循环时才会发生这种情况,这只发生在空数组或空数组中。如果数组包含任何有效的Integer.MAX_VALUE
,甚至Integer.MIN_VALUE
或public static int range(int[] list){
int max = Integer.MIN_VALUE, min = Integer.MAX_VALUE;
for(int i = 0; list != null && i < list.length; i++){
int current = list[i];
if(current > max){
max = current;
}
if(current < min){
min = current;
}
}
if(max >= min){
return max-min+1;
}
else throw IllegalArgumentException("Zero-length and null arrays have an undefined range!");
}
,则此完整性检查会成功。
500:Internal Server Error