-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;
}

我正在尝试将一维数组排序到一个矩阵中,其中 4 - 8 之间的数字在一个中,所有其他数字在另一个中。

4

3 回答 3

0

1)你没有初始化结果[][]。你会得到一个 NullPointerException。

循环遍历myNumbers,计算每个类别的值的数量,然后创建result[][],或将您的值推入 anArrayList<Double>[2]并使用List.toArray()以转换回数组。

2) result[][] 在您的方法之外声明。虽然在技术上是有效的,但如果没有特定的原因,它通常是糟糕的形式。由于您已经返回 double[][] 您可能希望在函数中声明一个 double[][] 以使用并返回。

于 2013-01-06T08:25:25.283 回答
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 回答
-1

您的结果数组未初始化。您是否收到空指针异常?那是问题吗?

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 回答