1

下面是代码,我只是想知道其他人是否对它进行了不同的编码。也许我可以做些小改动。提前致谢!

public class addRow {

    public static int[][] insert(int [][] a, int [] row, int index){

        int [][] x = new int[a.length+1][a.length];
        int [] temp;

        for(int i=0; i<x.length-1; i++)
        {
            x[i] = a[i];

            if(i == index)
            {
                temp = a[i];
                x[i] = row;
                x[i+1] = temp;          
            }           
        }
        return x;
    }

    public static void main(String[] args){
        int[][] a = {{1,2,3},{4,5,6},{10,11,12}};
        int[] row = {7,8,9};

        int [][] b = insert(a,row ,2);


        for(int r=0; r < b.length; r++){
            for(int c=0;c< b[r].length; c++){
                System.out.print(b[r][c] + " ");
            }System.out.println();
        }
    }
}
4

3 回答 3

1

System.arraycopy是你的答案。

http://docs.oracle.com/javase/6/docs/api/java/lang/System.html#arraycopy%28java.lang.Object,%20int,%20java.lang.Object,%20int,%20int% 29

它使用本机代码直接在内存中复制数组,从而提高效率。

于 2013-05-03T03:47:23.407 回答
1

你的循环没有做你认为它做的事情。当您交换行ii+1inx时,循环的下一次迭代将覆盖您在x[i+1]上一次迭代中放入的元素。您需要保留一个额外的索引(或拆分循环)以跟踪点击之间ax之后的位置差异index。不过,更好的方法是使用System.arraycopy.

此外,没有理由为其初始化程序中的行分配空间,因为无论如何您都将(or )x的元素分配给它们。我的方法版本是:arow

public static int[][] insert(int [][] a, int [] row, int index){
    int[][] x = new int[a.length + 1][]; // no second dimension
    System.arraycopy(a, 0, x, 0, index);
    x[index] = row;
    System.arraycopy(a, index, x, index + 1, a.length - index);
    return x;
}
于 2013-05-03T03:51:47.183 回答
0

仅仅因为您的代码似乎适用于1案例,并不意味着它是正确的。您也会尝试其他案例。

您需要对方法进行以下更改才能使其正常工作。

public static int[][] insert(int [][] a, int [] row, int index){

    int [][] x = new int[a.length+1][a.length];
    int j = 0; // New counter for array `a`
    // Also `temp` array removed. Not required at all.
    for (int i = 0; i < x.length; i++) {
        x[i] = a[j];
        if (i == index) {
            x[i] = row;
            x[i + 1] = a[j];
        } else {
            j++;
        }
    }
    return x;
}

这是您在不更改代码基础的情况下可以优化代码的最大值。

现在关于优化它正如其他人建议的那样,您可以使用System#arrayCopy.

于 2013-05-03T03:56:28.457 回答