-1
private double[] myNumbers = {10, 2, 5, 3, 6, 4};
private double[][] result;

private double[][] divideNumbers(double[] derp) {

    int j = 0, k = 0;
    for (int i=0; i < derp.length; i++) {
        if (derp[i] >=4 && derp[i] <=8) {
            result[1][j] = derp[i];
            j++;
        }
        else {
            result[0][k] = derp[i];
            k++;
        }
    }


    //System.out.println(result[0] +"  "+ result[1]);
    return result;
}

1 次元配列を行列に並べ替えようとしています。4 から 8 までの数字が 1 つにあり、他のすべての数字がもう 1 つにあります。

4

3 に答える 3

0

私はあなたが望むものを正確にフォローしていませんが、これによりコードが機能するはずです。

class OneDimToTwoDim {
    public static void main(String[] args) {

        // declare myNumbers one dimensional array
        double[] myNumbers = {10, 2, 5, 3, 6, 4};

        // display two dimensional array
        for (int x = 0; x < myNumbers.length; x++) {
            System.out.print("[" + myNumbers[x] + "] "); // Display the string.
        }

        // pass in myNumbers argument for derp parameter, and return a two dimensional array called resultNumbers
        double[][] resultNumbers = OneDimToTwoDim.divideNumbers(myNumbers);

        System.out.println(); // Display the string.
        System.out.println(); // Display the string.

        for (int x = 0; x < resultNumbers.length; x++) {
            for (int y = 0; y < resultNumbers[x].length; y++) {
                System.out.print("[" + resultNumbers[x][y] + "] "); // Display the string.
            }
            System.out.println(); // Display the string.
        }
    }

    private static double[][] divideNumbers(double[] derp) {

        // declare result to be returned 
        double[][] result = new double[2][derp.length];

        int j = 0, k = 0;
        for (int i=0; i < derp.length; i++) {
            if (derp[i] >=4 && derp[i] <=8) {
                    result[1][j] = derp[i];
                    j++;
            }
            else {
                    result[0][k] = derp[i];
                    k++;
            }
        }

        return result;
    }
}
于 2013-01-06T09:09:46.977 に答える
0

1) result[][] を初期化していません。NullPointerException が発生します。

をループしmyNumbers、各カテゴリの値の数を数えて を作成するresult[][]か、値を にプッシュしてArrayList<Double>[2]を使用List.toArray()して配列に変換します。

2) result[][] がメソッドの外で宣言されています。技術的には有効ですが、そうする特定の理由がない場合、一般的に不適切な形式です。すでに double[][] を返しているので、関数内で double[][] を宣言して操作して返すことができます。

于 2013-01-06T08:25:25.283 に答える
-1

結果配列が初期化されていません。null ポインター例外が発生していますか? それが問題ですか?

private static double[] myNumbers = {10, 2, 5, 3, 6, 4};
private static double[][] result = new double[2][myNumbers.length];
private static double[][] divideNumbers(double[] derp) {
    int j = 0, k = 0;
    for (int i=0; i < derp.length; i++) {
        if (derp[i] >=4 && derp[i] <=8) {
            result[1][j] = derp[i];
            j++;
        }
        else {
            result[0][k] = derp[i];
            k++;
        }
    }
    result[0] = Arrays.copyOfRange(result[0],0,k);
    result[1] = Arrays.copyOfRange(result[1],0,j);
    return result;
}
于 2013-01-06T08:25:54.667 に答える