Java 通过循环从数组中删除多行

Java 通过循环从数组中删除多行,java,arrays,Java,Arrays,我有2d数组(测试)和2d数组的行数需要删除(删除行)。问题是我创建的循环在打印测试数组时没有结果。我需要创建不包括第0,1,3,4行的新矩阵 如何在while循环之外访问新阵列 import java.util.ArrayList; import java.util.Arrays; public class remove { public static void main( String[] args ) { double[][] test = { { 100

我有2d数组(测试)和2d数组的行数需要删除(删除行)。问题是我创建的循环在打印测试数组时没有结果。我需要创建不包括第0,1,3,4行的新矩阵

如何在while循环之外访问新阵列

import java.util.ArrayList;
import java.util.Arrays;

public class remove
{
    public static void main( String[] args )
    {
        double[][] test = { { 100 }, { 200 }, { 300 }, { 400 }, { 500 }, { 600 }, { 700 },
                           { 800 }, { 900 }, { 1000 } };

        int[][] removeRow = { { 0 }, { 1 }, { 3 }, { 4 }, };

        int reduce = 1;
        int r = 0;
        while ( reduce == 0 )
        {
            ArrayList<double[]> rowsToKeep = new ArrayList<double[]>( test.length );
            for ( int i = 0; i < test.length; i++ )
            {
                if ( i != removeRow[0][0] - r )
                {
                    double[] row = test[i];
                    rowsToKeep.add( row );
                }
            }
            r++;
            test = new double[rowsToKeep.size()][];
            for ( int i = 0; i < rowsToKeep.size(); i++ )
            {
                test[i] = rowsToKeep.get( i );
            }
            reduce = removeRow.length - r;
            r = r++;
            System.out.println( Arrays.deepToString( test ) );
        }
    }
}
import java.util.ArrayList;
导入java.util.array;
公共类删除
{
公共静态void main(字符串[]args)
{
双[][]测试={{100}、{200}、{300}、{400}、{500}、{600}、{700},
{ 800 }, { 900 }, { 1000 } };
int[][]removeRow={{0},{1},{3},{4};
int-reduce=1;
int r=0;
while(reduce==0)
{
ArrayList rowsToKeep=新的ArrayList(test.length);
对于(int i=0;i
我稍微更改了一下您的算法。这里
如果(j
我们找到要删除的行,只需增加
j
,否则在
else
块中添加
rowsToKeep
列表中的行

试试这个:

double[][] test = { {100}, {200}, {300}, {400}, {500}, {600}, {700}, {800}, {900}, {1000} };
int[][] removeRow = { {0}, {1}, {3}, {4} };
int j = 0;
List<double[]> rowsToKeep = new ArrayList<>(test.length);
for (int i = 0; i < test.length; i++) {
    if (j < removeRow.length && removeRow[j][0] == i) {
        j++;
    } else {
        double[] row = test[i];
        rowsToKeep.add(row);
    }
}
test = new double[rowsToKeep.size()][];
for (int i = 0; i < rowsToKeep.size(); i++) {
    test[i] = rowsToKeep.get(i);
}
System.out.println(Arrays.deepToString(test));
double[]test={{100}、{200}、{300}、{400}、{500}、{600}、{700}、{800}、{900}、{1000};
int[][]removeRow={{0},{1},{3},{4};
int j=0;
List ROWSTOKEP=新阵列列表(测试长度);
对于(int i=0;i
while循环是否执行?我不明白它在eclipse中运行时如何不显示任何错误。但是数组中没有值打印。我不知道还有什么方法适合我的问题。你只访问removeRow[0][0],为什么它是一个数组,而你从不使用任何其他元素?我想问关于.add(行)的问题。我们可以存储多行吗?我最近刚刚了解了arraylist,想知道.add、.size和.Get的含义。对于多行,您可以使用
addAll()
方法
add()
仅用于将一个元素追加到列表中。