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

あなたのループは、あなたが思っていることをしません。i行とi+1inを交換するxと、ループの次の反復で、前の反復で入力した要素が上書きさx[i+1]れます。axヒット後の位置の違いを追跡するには、追加のインデックスを保持する (またはループを分割する) 必要がありますindex。ただし、より良いアプローチは、を使用することSystem.arraycopyです。

また、 (または)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 に答える