Моя программа состоит из сетки, состоящей из 2D-массива. Пользовательский ввод удаляет определенные элементы сетки, оставляя пробелы. Моя проблема заключается в том, что элементы над пустыми пространствами выпадают.Применение силы тяжести: 2D-массивы
Оригинал У меня был массив, чтобы проверить, пустое ли место, а если оно пустое, элемент выше будет удален и воссоздан там, где раньше был пробел.
Моя проблема заключается в том, что массив, который я использовал для этого, был Left-> Right, Top-> Down (i ++, j ++), это оставляет мне проблему повторить весь код, чтобы получить новые построенные пробелы , (Например, если я удалю что-то из 3-й строки, вторая строка будет пустой, но я бы уже проверил вторую строку.
Так как это было бы очень неэффективно (в том числе ошибки перегрузки), я решил сделать резерв, bottom-> top, right-> left array (i -, j--), моя проблема заключается в том, что я получаю массив за пределами ошибки, хотя я убедился, что это невозможно для него чтобы выйти за пределы
Вот кусок кода, который дает неполадок
public static void dropBall(){
for (i =Settings.row-1;i>=0;i--){
for (j =Settings.col-1;i>=0 ; j--){
if (i <0||j<0)break;
if (Settings.grid[i+1][j]==666){
//checking if the space below has the 666 ID (666 ID equals to blank)
Settings.grid[i+1][j]=Settings.grid[i][j]; //Deleting the current blank
}
}
}
}
. Примечание: Settings.row and Settings.col
подобны something.lenght
, что означает, что они имеют длину сетки, хотя сетка начинается с 0.
Как избежать ошибки outofBounds в этой ситуации?
_ "Settings.row [...] подобны something.lenght" _. Итак, вы начинаете 'i' на' length-1', и вы делаете 'grid [i + 1]'. Поэтому на первой итерации в вашем операторе if это эквивалентно 'grid [length] [j]'. Вот почему вы получаете это исключение. –
Правда, я полностью забыл, что внизу нет ничего под собой, или, по крайней мере, ничто в упомянутом массиве – Oak