Изменение определенных строк многомерного списка
Как пройти двумерный ArrayList>, и для определенных строк вы вычитаете одну (но не для всех, просто в основном перед этим стоит логическая проверка T/F, если логическая переменная T, то делайте это) Все, что я оставляю придумать то, что по существу заканчивается бесконечным для петель
Изменение должно быть сделано только для определенных строк списка... т.е.: (для целей, чтобы заставить это работать, elig.get(0) является ложным)
если у меня есть: [[1, 2, 3], [4, 5, 2], [2, 1, 1], [3, 6, 1], [1, 6, 3]] я бы хотел получить (например) в
1-я и последняя строки должны быть -1, поэтому: [[0, 1, 2], [4, 5, 2], [2, 1, 1], [3, 6, 1], [0, 5, 2]]
и так далее
код, который у меня есть сейчас: (Я изолировал его, и действительно понятия не имею, почему это не работает?
for(int j=0; j<(bigArr.size()); j++) {
for(int k=0; k<(bigArr.get(0).size()); k++) {
if(elig.get(0) == false) {
bigArr.get(j).set(k, ballotArr.get(j).get(k)-1);
}
}
System.out.println(ballotArr);
}
2 ответа
Это как ArrayList из ArrayList. Поэтому вместо ссылки на определенный элемент в обычном массиве, например arr[row][column], это будет arr.get(row).get(column)
//loops through first dimension
for(int row=0;row<myList.size();row++) {
//check that T/F you mentioned
if(myBoolean) {
//loop through second dimension
for(int i=0;i<myList.get(row).size();i++) {
//subtract 1 from everything in second dimension
myList.get(row).set(i, myList.get(row).get(i)-1);
}
}
}
Это должно сделать трюк:
List<List<Integer>> nums = ...;
if (nums.size() >= 2) {
subtractOneFromRow(nums, 0);
subtractOneFromRow(nums, nums.size() - 1);
} else if (nums.size() == 1) {
subtractOneFromRow(nums, 0);
}
// Do nothing if there are no rows
// ...
private static void subtractOneFromRow(List<List<Integer>> nums, int r) {
List<Integer> row = nums.get(r);
for (int c = 0; c < row.size(); c++) {
row.set(c, row.get(c) - 1);
}
}