2012-12-14 44 views
0

我想從int的數組中獲得至少5個最小值。我的代碼附加的作品,但它跳過少數值!如何從int數組中獲取多個最小值?

public static void main(String[] args) { 
    int array[] = {0, 1, 2, 1, 4, 5, 1, 7, 8, 1, 10, 11, 12, 13, 1, 15, 16, 17, 18, 19, 20, 2, 22, 23}; 
    int min = 0; 
    int index = 0; 
    String output = ""; 
    for (int x = 0; x < 5; x++){ 
     min = array[x]; 
     index++; 
     for(int i = index, limit = array.length; i < limit; ++i){ 
      if(array[i] <= min){ 
       min = array[i]; 
       index = i + 1; 
       break; 
      } 
     } 
     output += index + "\t";    
    } 
    System.out.println(output); 
} 
+3

提問。 – ApplePie

+1

您可以先排序數組嗎? –

+0

您是否在尋找重複的最小值? – dasblinkenlight

回答

10
Arrays.sort(array); 
return Arrays.copyOfRange(array, 0, 5); 

如果你不想突變傳遞的陣列(即要離開它未排序),加入這一行第一:

int[] array = Arrays.copyOf(array); 
4

也許你可以使用Arrays.sort()對數組進行排序,然後取前五個值:

Arrays.sort(array); 

現在array[0]array[4]包含最低的5個值。

1

如果你只想得到5個最小值,我同意波希米亞的答案。 如果你想顯示爲1,2,4,7,10陣列的位置,這樣,您的演示是跳過2, 試試我的測試...

public static void main(String[] args) { 
    int getNum = 5; 
    int step = 0; 
    String output = ""; 
    int array[] = {0, 1, 2, 1, 4, 5, 1, 7, 8, 1, 10, 11, 12, 13, 1, 15, 16, 17, 18, 19, 20, 2, 22, 23}; 
    int arrayClone[] = array.clone(); 
    Arrays.sort(array); 
    int arrayResult[] = Arrays.copyOfRange(array, 0, getNum); //the arrayResult is what you want minimum values 

    ploop:for (int i:arrayResult) { 
     int index = 1; 
     for (int j :arrayClone) { 
      if(j==i){ 
       step++; 
       output += index + "\t"; 
       if (step>=getNum) { 
        break ploop; 
       }      
      } 
      index++; 
     } 
    } 

    System.out.println(output);   
} 
相關問題