У меня есть 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 ) );
        }
    }
}
0
Harith 11 Ноя 2018 в 19:06

1 ответ

Лучший ответ

Я немного изменил ваш алгоритм. Здесь if (j < removeRow.length && removeRow[j][0] == i) мы находим строку, которую нужно удалить, и ничего не делаем, просто увеличиваем 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));
1
buræquete 12 Ноя 2018 в 11:31