PDA

Показать полную графическую версию : [решено] Удалить пустые строки двухмерного массива


blackeangel
26-05-2017, 19:26
Помогите доделать функцию, чтобы она заменяла посылаемый на неё массив на тот, что уже получется в результате

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

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
Просто когда в коде вызываю её

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

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

?

shisik
27-05-2017, 15:02
Или надо вызывать как то так

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

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

blackeangel
29-05-2017, 18:15
Теперь тупой вопрос, но нигде не нашел ответа: как присвоить значение в двумерном массиве в последней строке нулевого столбца?
arr[arr.length][0]="кукушка";
Не работает.
Как правильно то?

shisik
29-05-2017, 19:30
blackeangel, не забывайте, что нумерация в массивах начинается с нуля, т.е. последний индекс - не

arr.length

а

arr.length - 1




© OSzone.net 2001-2012