Java 如何减少二维阵列

Java 如何减少二维阵列,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我有一个2d数组,比如说: 2 0 8 9 3 0 -1 20 13 12 17 18 1 2 3 4 2 0 7 9 如何创建一个减少了第二行和第三列的数组 2 0 9 13 12 18 1 2 4 2 0 9 公共类TestMe{ /** *@param args */ 公共静态void main(字符串[]args){ //TODO自动生成的方法存根 int数组[][]={{2,0,8,9,}, {3

我有一个2d数组,比如说:

2   0   8   9
3   0  -1  20
13  12  17  18
1   2   3   4
2   0   7   9
如何创建一个减少了第二行和第三列的数组

2   0    9
13  12   18
1   2    4
2   0    9
公共类TestMe{
/**
*@param args
*/
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
int数组[][]={{2,0,8,9,},
{3,   0,  -1,  20},
{13,  12,  17,  18},
{1,   2,   3,   4,},
{2,   0,   7,   9}};
对于(inti=0;i
public类TestMe{
/**
*@param args
*/
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
int数组[][]={{2,0,8,9,},
{3,   0,  -1,  20},
{13,  12,  17,  18},
{1,   2,   3,   4,},
{2,   0,   7,   9}};

对于(int i=0;i来说,删除数组中的行和列是代价高昂的操作,因为您需要进行移位,但这些方法可以实现您想要的功能:

static int[][] removeRow(int[][] data, int r) {
    int[][] ret = new int[data.length - 1][];
    System.arraycopy(data, 0, ret, 0, r);
    System.arraycopy(data, r+1, ret, r, data.length - r - 1);
    return ret;
}

static int[][] removeColumn(int[][] data, int c) {
    for (int r = 0; r < data.length; r++) {
        int[] row = new int[data[r].length - 1];
        System.arraycopy(data[r], 0, row, 0, c);
        System.arraycopy(data[r], c+1, row, c, data[r].length - c - 1);
        data[r] = row;
    }
    return data;
}
static int[][]删除流(int[][]数据,int r){
int[][]ret=new int[data.length-1][];
数组复制(数据,0,ret,0,r);
System.arraycopy(数据,r+1,ret,r,data.length-r-1);
返回ret;
}
静态int[][]removeColumn(int[][]数据,int c){
for(int r=0;r

但是,您可能需要研究其他允许更便宜的删除的数据结构,即双链接列表。例如,请参见。

删除数组中的行和列是昂贵的操作,因为您需要移动内容,但这些方法可以满足您的需要:

static int[][] removeRow(int[][] data, int r) {
    int[][] ret = new int[data.length - 1][];
    System.arraycopy(data, 0, ret, 0, r);
    System.arraycopy(data, r+1, ret, r, data.length - r - 1);
    return ret;
}

static int[][] removeColumn(int[][] data, int c) {
    for (int r = 0; r < data.length; r++) {
        int[] row = new int[data[r].length - 1];
        System.arraycopy(data[r], 0, row, 0, c);
        System.arraycopy(data[r], c+1, row, c, data[r].length - c - 1);
        data[r] = row;
    }
    return data;
}
static int[][]删除流(int[][]数据,int r){
int[][]ret=new int[data.length-1][];
数组复制(数据,0,ret,0,r);
System.arraycopy(数据,r+1,ret,r,data.length-r-1);
返回ret;
}
静态int[][]removeColumn(int[][]数据,int c){
for(int r=0;r

但是,您可能希望研究其他允许更便宜删除的数据结构,即双链接列表。例如,请参见。

不幸的是,没有内置的数据结构。您应该寻找矩阵操作库。您是否正在寻找一个库或一个可以编写的函数来执行操作。函数将允许我不打印而是创建此数组。不幸的是,没有内置的。你应该查找矩阵操纵库。你是在寻找一个库还是一个可以编写的函数来执行操作。函数允许我不打印而是创建此数组。这样我可以只打印它,但它不会给我缩小数组:/n这样我只能打印它,但它不会给我缩小数组:/