2016-12-14 45 views
0

我正在學習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

考慮使用Integer.MIN_VALUE的&& MAX_VALUE –

+0

也無需存儲'range'只返回'(最大值 - 最小值)+ 1' –

+0

有在Java中預定義的值稱爲Integer.MAX_VALUE的,它等於2的31次方 - 1是int數的最大值。 – AndreyS

回答

0

此方法返回至少一個元素的所有非空數組的範圍,否則它將引發IllegalArgumentException。如果minmax的原始初始值保持不變,則通過max >= min的完整性檢查來完成,其僅爲true。只有在跳過for循環時纔會發生這種情況,這隻會發生在空數組或空數組中。如果該陣列包含任何有效的int,即使Integer.MAX_VALUEInteger.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!"); 
}