2015-11-12 20 views
0

這裏是我到目前爲止的代碼片段。我的問題是最小值出現爲Integer.MAX_VALUE,而不是我想要的值。 iSpeedMph和壓力都是一維整數數組。Java最小取景器不起作用

//calculating mins 
    Integer min = Integer.MAX_VALUE; 
    int minSpeed = Integer.MAX_VALUE; 
    int minPressure = Integer.MAX_VALUE; 
    for(i = 0; i < iSpeedMph.length; i++) 
    { 
     if (min > iSpeedMph[i]) 
     { 
      min = iSpeedMph[i]; 
      minSpeed = iSpeedMph[i]; 
     } 
    } 

    min = Integer.MAX_VALUE; 

    for(i = 0; i < pressure.length; i++) 
    { 
     if (min > pressure[i]) 
     { 
      min = pressure[i]; 
      minPressure = pressure[i]; 
     } 
    } 
... 
    System.out.printf("%7s%2s%-9s%4s%8s%5s%13.3s%5s%16.2s\n", "Minimum", " ", " ", " ", " ", " ", minPressure, " ", minSpeed); 

當我打印出最後一行,則終端顯示速度,214爲壓力和21,未經格式化,意味着它們都Integer.MAX_VALUE的。

+0

像這樣的簡單錯誤是最令人討厭的! – DonyorM

回答

2

您正在檢查當前項目是否大於當前最小值,即Integer.MAX_VALUE,但您希望檢查當前項目是否小於當前最小值,例如,

if (iSpeedMph[i] < min) 

並且同樣用於其他最小確定。

2

測試

if (iSpeedMph[i] > min) 

總是返回false。您必須反轉比較

if (iSpeedMph[i] < min) 

或作爲替代

if (min > iSpeedMph[i]) 
1

以下條件將永遠不會成爲任何整數如此,因爲minInteger.MAXVALUE

if (iSpeedMph[i] > min) 

只是初始化爲0,以檢查是否要在陣列搜索所有的min或,與第一陣列值與環路從第二元件陣列分配分鐘。

0

正如其他人已經指出,你在if語句中有比較錯誤。但是,在Java 8流中查找數組中的最小值和最大值非常簡單:

int minSpeed = Arrays.stream(iSpeedMph).min().get(); 
int minPressure = Arrays.stream(pressure).min().get();