0

の配列から少なくとも 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);
}
4

3 に答える 3

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

渡された配列を変更したくない (つまり、並べ替えずに残したい) 場合は、最初に次の行を追加します。

int[] array = Arrays.copyOf(array);
于 2012-12-14T02:33:15.920 に答える
4

おそらく、Arrays.sort() を使用して配列をソートし、最初の 5 つの値を取得できます。

Arrays.sort(array);

ここarray[0]array[4]、最低 5 つの値を含めます。

于 2012-12-14T02:33:27.680 に答える
1

最小値を 5 つだけ取得したい場合は、Bohemian's Answer に同意します。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);        
}
于 2012-12-14T10:20:29.917 に答える