如何在Java中从二维数组中删除特定行和特定列?

4
如果我有一个接受int[][]、要删除的行号和要删除的列号的方法,我该如何从数组中删除特定的行和列,并返回新的缩小后的数组?
我想通过取除了我要删除的行/列之外的所有内容并将其放入两个临时ArrayList中来实现,然后从这两个ArrayList中的值构造一个新的Array来返回。我认为我可以很好地删除一个特定的行,但是我不知道如何同时删除列。

1
如果我理解正确的话,你不可以分配一个新的大小为int[m-1][n-1]的数组,然后遍历原始数组,复制元素但跳过你想要删除的行/列吗? - Dan Q
2个回答

6
我认为最好的方法是创建一个新的数组

int[xsize-1][ysize-1]

使用嵌套的for循环将源数组复制到目标数组中,并跳过特定的 ij

static void TestFunction()
    {
        int rows = 5;
        int columns = 6;
        int sourcearr[][] = new int[rows][columns];
        int destinationarr[][] = new int[rows-1][columns-1];

        int REMOVE_ROW = 2;
        int REMOVE_COLUMN = 3;
        int p = 0;
        for( int i = 0; i < rows; ++i)
        {
            if ( i == REMOVE_ROW)
                continue;


            int q = 0;
            for( int j = 0; j < columns; ++j)
            {
                if ( j == REMOVE_COLUMN)
                    continue;

                destinationarr[p][q] = sourcearr[i][j];
                ++q;
            }

            ++p;
        }
    }

看起来不错,但是“sourcearr[i][j] = 10 * i + j;”这一行的目的是什么? - DrBaus
只是一些测试数据,没有其他的了。你的源数组将有输入数据,请忽略它。 - parapura rajkumar
你需要变量p和q吗? - Andy Lebowitz

0

我正在尝试删除两列中索引为2的所有3,如何实现?

public class For_petlja {

    public static void main(String[] args) {

        int[][] niz = {
            {9, 2, 3, 6, 7},
            {4, 7, 3, 5, 1}
        };
        int j;
        for (int i = 0; i < niz.length; i++) {
            for (j = 0; j < niz[i].length; j++) {
                if (i == 2) {
                    continue;
                }
            } // for 'j'
            System.out.println(Arrays.toString(niz[j]));
        } // for 'i'
    } // main method.
} // class

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接