用Java克隆二维数组

用Java克隆二维数组,java,arrays,multidimensional-array,clone,Java,Arrays,Multidimensional Array,Clone,我知道有人问过类似的问题,但在阅读了他们的答案后,我一直无法解决我的问题:我需要实现Java方法clone,它将给定二维数组a中的所有双条目复制到新创建的相同类型和大小的二维数组中。此方法将数组a作为输入,并返回带有复制值的新数组 重要提示:我不允许使用库方法克隆阵列 以下是我迄今为止所做的工作:可能我不理解需求,但它不起作用: class Solution { static double[][] clone(double[][] a) { double[][] b =

我知道有人问过类似的问题,但在阅读了他们的答案后,我一直无法解决我的问题:我需要实现Java方法clone,它将给定二维数组a中的所有双条目复制到新创建的相同类型和大小的二维数组中。此方法将数组a作为输入,并返回带有复制值的新数组

重要提示:我不允许使用库方法克隆阵列

以下是我迄今为止所做的工作:可能我不理解需求,但它不起作用:

class Solution {
    static double[][] clone(double[][] a) {
        double[][] b = new double[a.length][a.length];
        for (int i = 0; i < a.length; i++) {
            b[i][i] = a[i][i];
        }
        return b;
    }
}
类解决方案{
静态双[]克隆(双[]a){
double[]b=新的双精度[a.length][a.length];
for(int i=0;i
这是我收到的错误消息:

Status: Done
cloneLonger(weblab.UTest) failed: 'java.lang.AssertionError: expected:<3> but was:<2>'
Test score: 2/3
状态:完成
cloneLonger(weblab.UTest)失败:“java.lang.AssertionError:应为:但为:”
考试成绩:2/3

类似的方法应该可以使用(使用库方法):

公共类Util{
//克隆二维阵列
公共静态布尔[][]二维环形(布尔[][]a){
布尔值[][]b=新的布尔值[a.length][];
for(int i=0;i
类似的方法应该可以使用(使用库方法):

公共类Util{
//克隆二维阵列
公共静态布尔[][]二维环形(布尔[][]a){
布尔值[][]b=新的布尔值[a.length][];
for(int i=0;i
您应该使用两个循环迭代此数组。这将帮助您:

static double[][] clone(double[][] a) {
    double[][] b = new double[a.length][];
    for (int i = 0; i < a.length; i++) {
        b[i]= new double[a[i].length];
        for (int j = 0; j < a[i].length; j++)
            b[i][j] = a[i][j];
    }
    return b;
}
static double[]a克隆(double[]a){
double[]b=新的double[a.长度][];
for(int i=0;i
您应该使用两个循环迭代此数组。这将帮助您:

static double[][] clone(double[][] a) {
    double[][] b = new double[a.length][];
    for (int i = 0; i < a.length; i++) {
        b[i]= new double[a[i].length];
        for (int j = 0; j < a[i].length; j++)
            b[i][j] = a[i][j];
    }
    return b;
}
static double[]a克隆(double[]a){
double[]b=新的double[a.长度][];
for(int i=0;i
您有一些逻辑错误:

1。矩阵的大小可以是
M
x
N
,其中
M
是行数,
N
是列数。在您的解决方案中,您想当然地认为
M
始终等于
N



2。您在所有行中进行迭代,并且每行只设置一列,如
target[K][K]=source[K][K]
->这将只复制对角线,而不是整个矩阵。

您有一些逻辑错误:

1。矩阵的大小可以是
M
x
N
,其中
M
是行数,
N
是列数。在您的解决方案中,您想当然地认为
M
始终等于
N



2。您在所有行中进行迭代,并且每行只设置一列,如
target[K][K]=source[K][K]
->这将只复制对角线,而不是整个矩阵。

复制到临时单行数组,然后将其分配给out数组

static double[][] clone(double[][] a) {
    double[][] b = new double[a.length][];
    for (int i = 0; i < a.length; i++) {
        double[] temp = new double[a[i].length];
        for (int j = 0; j < temp.length; j++) {
            temp[j] = a[i][j];
        }
        b[i] = temp;
    }
    return b;
}
static double[]a克隆(double[]a){
double[]b=新的double[a.长度][];
for(int i=0;i
复制到临时单行数组,然后将其分配到out数组

static double[][] clone(double[][] a) {
    double[][] b = new double[a.length][];
    for (int i = 0; i < a.length; i++) {
        double[] temp = new double[a[i].length];
        for (int j = 0; j < temp.length; j++) {
            temp[j] = a[i][j];
        }
        b[i] = temp;
    }
    return b;
}
static double[]a克隆(double[]a){
double[]b=新的double[a.长度][];
for(int i=0;i
您不能创建这样的新数组。如果您确定数组的长度和宽度相同,则只有这样才能工作

class Solution {
    static double[][] clone(double[][] a) {
        boolean[][] b = new boolean[a.length][];
        for (int i = 0; i < a.length; i++) {
            b[i] = new double[a[i].length];
            for (int j = 0; i < a[i].length; j++) {
                  b[i][j] = a[i][j];
            }
        }
        return b;
    }
}
类解决方案{
静态双[]克隆(双[]a){
布尔值[][]b=新的布尔值[a.length][];
for(int i=0;i
您不能创建这样的新数组。如果您确定数组的长度和宽度相同,则只有这样才能工作

class Solution {
    static double[][] clone(double[][] a) {
        boolean[][] b = new boolean[a.length][];
        for (int i = 0; i < a.length; i++) {
            b[i] = new double[a[i].length];
            for (int j = 0; i < a[i].length; j++) {
                  b[i][j] = a[i][j];
            }
        }
        return b;
    }
}
类解决方案{
静态双[]克隆(双[]a){
布尔值[][]b=新的布尔值[a.length][];
for(int i=0;i
在这种情况下,您的代码几乎没有错误。这些更正如下所示。二维数组有2个长度。在这种情况下,您没有考虑内部数组长度。
class Solution {
    static double[][] clone(double[][] a) {
        double[][] b = new double[a[0].length][a.length];
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
               b[i][j] = a[i][j];
            }
        }
        return b;
    }
}
类解决方案{
静态双[]克隆(双[]a){
double[]b=新的double[a[0].长度][a.length];
for(int i=0;i
在这种情况下,您的代码几乎没有错误。这些更正如下所示。二维数组有2个长度。在这种情况下,您没有考虑内部数组长度。
class Solution {
    static double[][] clone(double[][] a) {
        double[][] b = new double[a[0].length][a.length];
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
               b[i][j] = a[i][j];
            }
        }
        return b;
    }
}
类解决方案{
静态双[]克隆(双[]a){
double[]b=新的double[a[0].长度][a.length];
for(int i=0;i