Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Удалить пустые строки двухмерного массива (http://forum.oszone.net/showthread.php?t=327101)

blackeangel 26-05-2017 19:26 2739911

Удалить пустые строки двухмерного массива
 
Помогите доделать функцию, чтобы она заменяла посылаемый на неё массив на тот, что уже получется в результате
Код:

private static String[][] DelEmptyRow2DArray(String[][] mass) {
        int k = 0;
        for (int i = 0; i < mass.length; i++) {
            if (mass[i][0] != null) {
                k = k + 1;
            }
        }
        String[][] new_mass = new String[k][mass[0].length];
        for (int i = 0; i < mass.length; i++) {
            if (mass[i][0] != null) {
                for (int n = 0; n < new_mass.length; n++) {
                    for (int j = 0; j < mass[0].length; j++) {
                        new_mass[n][j] = mass[i][j];
                    }
                }
            }
        }
        return new_mass;
        }


shisik 27-05-2017 04:37 2740014

Один цикл лишний. Зачем перебирать весь новый массив на каждой непустой строке? Этот код будет заполнять весь итоговый массив данными из каждой непустой строки и в самом конце все строки массива будут равны последней строке исходного массива. Поэтому нужно сделать как-то так:

Код:

private static String[][] DelEmptyRow2DArray(String[][] mass) {
    int k = 0;
    for (int i = 0; i < mass.length; i++) {
        if (mass[i][0] != null) {
            k = k + 1;
        }
    }
    int n = 0;
    String[][] new_mass = new String[k][mass[0].length];
    for (int i = 0; i < mass.length; i++) {
        if (mass[i][0] != null) {
            for (int j = 0; j < mass[0].length; j++) {
                new_mass[n][j] = mass[i][j];
            }
            n++;
        }
    }
    return new_mass;
}

Ну или намного проще:

Код:

private static String[][] DelEmptyRow2DArray(String[][] arr) {
    ArrayList<String[]> list = new ArrayList<String[]>();
    for (String[] str : arr) {
        if (str[0] != null)
            list.add(str);
    }
    return list.toArray(new String[0][0]);
}


blackeangel 27-05-2017 08:59 2740027

Просто когда в коде вызываю её
Код:

DelEmptyRow2DArray(massiv);
то в massiv не удаляются пустые строки. Может я чего то не то делаю?
Может как-то по другому вызывать эту функцию?
С этим я еще толком не разобрался. Находится эта функция в этом же классе.
Или надо вызывать как то так
Код:

String[][] Massiv2=DelEmptyRow2DArray(massiv);
?

shisik 27-05-2017 15:02 2740097

Цитата:

Цитата blackeangel
Или надо вызывать как то так

Код:

String[][] Massiv2=DelEmptyRow2DArray(massiv);
»

Да, именно так.

blackeangel 29-05-2017 18:15 2740566

Теперь тупой вопрос, но нигде не нашел ответа: как присвоить значение в двумерном массиве в последней строке нулевого столбца?
Код:

arr[arr.length][0]="кукушка";
Не работает.
Как правильно то?

shisik 29-05-2017 19:30 2740585

blackeangel, не забывайте, что нумерация в массивах начинается с нуля, т.е. последний индекс - не

Код:

arr.length
а

Код:

arr.length - 1


Время: 22:45.

Время: 22:45.
© OSzone.net 2001-