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


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

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

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

2) result[][]在方法外部声明。虽然在技术上是有效的,但如果没有明确的理由,这通常是糟糕的形式。因为你已经返回了双精度[][],你可能想在你的函数中声明一个双精度[][]来处理和返回。

我没有完全按照你想要的,但这应该允许你的代码工作。

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

结果数组未初始化。你得到空指针异常吗?这是问题所在吗?

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

最新更新