将一维数组排序为二维数组

时间:2013-01-06 08:19:45

标签: java arrays sorting matrix

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之间的数字在一个中,而所有其他数字在另一个中。

3 个答案:

答案 0 :(得分:0)

1)您没有初始化result [] []。您将获得NullPointerException。

循环浏览myNumbers,计算每个类别的值数量,然后创建result[][],或将您的值推送到ArrayList<Double>[2]并使用List.toArray()转换回来到阵列。

2)result [] []在您的方法之外声明。虽然技术上有效,但如果没有特定原因,它通常是不良形式。由于你已经返回double [] [],你可能想在你的函数中声明一个double [] []来处理和返回。

答案 1 :(得分: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;
    }
}

答案 2 :(得分:-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;
}