2012-08-25 60 views
1

這是來自過去的論文的問題。我被要求創建一個靜態方法arrayMin來找到數組arr中的最小值。Java,查找數組中的最小數字

我必須使用while循環,並且在每次迭代時,變量min將返回第一個i元素中的最小數字。

有沒有辦法做到這一點,而無需調用其他方法/ for循環,並嚴格使用while循環,因爲問題只值4%(包括編寫循環不變量和javadoc)。不知道我是否過於複雜的問題。

public class Revision { 

public static int arr[] = new int[] { 5, 8, 4, 3, 6, 2 }; 
public static int min = 1; 

public static int arrayMin() { 

    int i = 0; 

    if (arr == null) { 
     return 0; 

    } else { 
     while (i < arr.length) { 
      // some function/method call to find smallest number of arr[i] 
      i++; 
      return min; 
     } 
    } 
    return min; 
} 

public static void main(String[] args) { 

    System.out.println(arrayMin()); 
} 

}

+1

在你的代碼總是返回'1'如果'ARR!= null'否則'0',因爲你的'在'while'返回min'聲明循環。 – nkr

+0

我認爲這是一個不錯的優化,可以返回範圍內值的最小值,這個範圍內的值可以用於數組中的每個元素。請注意,在Java中,0可能不是最小值,整數可能具有負值。 –

+0

「null」的值通常不等於0元素的數組。如果您遇到null數組,您最好檢查null並拋出'NullPointerException'或'IllegalArgumentException'。 –

回答

8

幾件事情:

  1. 陣列不應該是靜態的,則應該將它作爲參數arrayMin方法;
  2. min應該是當地的arrayMin變量,不是靜態的;
  3. min應該初始化爲Integer.MAX_VALUE。如果用1初始化它,而2碰巧是數組的最小值,那麼您將永遠不會返回它;
  4. 您不能從方法返回多次。只要你做return min,該方法結束。可能會有一些混淆變量min將返回第一個元素短語中的最小數字。這可能意味着在每個迭代,變量min(不返回)從最初的i元素的最小數。

這裏有一個重構:

public static int arrayMin(int[] arr) { 
    int i = 0; 
    int min = Integer.MAX_VALUE; 
    if (arr == null) { 
     return 0; // What if 0 is the minimum value? What do you want to do in this case? 
    } else { 
     while (i < arr.length) { 
      if (arr[i] < min) { 
       min = arr[i]; 
      } 
      i++; 
     } 
    } 
    return min; 
} 
+1

+1以獲得更多解釋,但請不要返回編程指定的完整代碼。 –

+0

感謝您的解釋,這使問題更容易理解。 – nsc010

6

你需要有一個名爲min環路以外的變量。您將使用該循環來查找數組的最小值,並在循環完成時返回min

} else { 
    int min = Integer.MAX_VALUE; 

    while(i < arr.length) { 
     // is arr[i] < min? If so, it's the new minimum 
     i++; 
    } 

    return min; 
} 
0

多種方式來做到這一點,但這裏是一個。 公共靜態INT arrayMin(INT [] ARR){

  boolean isFirstElement = true; 

      int smallestNumber= 0; 

      int index = 0; 

      while(index < arr.length) { 

       int temp= arr[index]; 

       index++; 

       if (isFirstElement) { 

        smallestNumber = temp; 

        isFirstElement = false; 

       } else if (smallestNumber > temp) { 

        smallestNumber = temp; 
       } 
      } 

}

0

可以使用索引變量,以保持在軌道陽性命中的數目,並且如果相應的數量的索引值是一個較小數組的大小,這個數字是最小

class testtt{ 
    static int small=0; 
    public static void main(String[] args) { 
     int arr[] = {9,2,3,4,5,6,7,8};  
     int i,index=0;  
     for(int q:arr) 
     {     
      for(i=0;i<arr.length;i++) 
      {    
       if(q<arr[i]) 
       { 
        small=q; 
        index++; 
       } 
      } 
      if(index==arr.length-1) 
       System.out.println(small); 
     } 

    } 
}