0

事後条件 b [0...h] <= 9 および b[k+1..] > 9 が true になるように、配列 b の値を交換して k に値を格納しようとしています。

私はこれまでのところこれを持っています:

for ( int b = 0; k!= b.length; k = k+1 ) {
    int p = k+1;
    for ( int h= k+1; h != b.length; h= h+1 ) {
       if ( b[h] < b[p] ){ 
           p= h;
       }
    }

    int t = b[h]; 
    b[h]= b[p]; 
    b[p]= t;
}
4

1 に答える 1

0

私が理解していることから、あなたがやろうとしているのは、 の配列を取得しint、並べ替えてから、 のインデックスを見つけることn > 9です。

これを実現する最も簡単な方法は、Arrays.sort最初に配列を並べ替えるために使用することです。次に、単純な for ループで最後のインデックスがどこにあるかを示します。その後、配列を 2 つに分割できます。最初の配列にはすべての値 <= 9 が含まれ、2 番目の配列にはすべて >9 の値が含まれます。

次に例を示します。

public static void main(String[] args) {

    //Test data
    int[] arrayOfInt = {11, 42, 24, 1, 8, 9, 10, 15, 8, 29, 9, 34 };

    //Sort the array
    Arrays.sort(arrayOfInt);

    int index = 0;

    //This will get you the index where the last number is <= 9
    for (int i = 0; i < arrayOfInt.length; i++) {
        if (arrayOfInt[i] <= 9)
            index = i + 1;
    }

    //Now you know that from arrayOfInt[0] -> arrayOfInt[index] will be <= 9
    //If you want to use them seperately, you can just split the array into two
    int[] lessThanOrEqualToNine = Arrays.copyOfRange(arrayOfInt, 0, index);
    int[] greaterThanNine = Arrays.copyOfRange(arrayOfInt, index, arrayOfInt.length);

    System.out.println(Arrays.toString(lessThanOrEqualToNine));
    System.out.println(Arrays.toString(greaterThanNine));

    /* Prints the output:
     *  [1, 8, 8, 9, 9]
     *  [10, 11, 15, 24, 29, 34, 42]
     */
}
于 2012-04-18T07:39:59.257 に答える