#java #android #android-studio #for-loop #indexoutofboundsexception
#java #Android #android-studio #для цикла #исключение indexoutofboundsexception
Вопрос:
Я пытаюсь разработать свое первое приложение для Android с использованием Android studio и получаю пару предупреждений, от которых, похоже, не могу избавиться во внутреннем конструкторе класса:
- В цикле for он предупреждает, что условие завершения всегда истинно. Однако этот wanring отображается только для внутреннего
col
цикла for, а не для внешнегоrow
цикла for. - При назначении
grid[row][col]
он предупреждает, что индекс массива[row]
выходит за рамки, но не о том, что индекс[col]
есть.
Я не понимаю, почему предупреждения вообще появляются, учитывая, что код, похоже, выполняется по назначению, но также и почему предупреждения появляются только для одного цикла for и одного индекса, когда, конечно, любая проблема также применима к другому? Любая помощь очень ценится!
private class MyInnerClass {
private final Character UNKNOWN = '.';
// State data
private String id;
private Integer grid_size;
private final Character[][] grid;
// Constructor
public MyInnerClass(String id, Integer grid_size) {
// Check the grid size is in the permitted range
String[] permitted_grid_sizes = getResources()
.getStringArray(R.array.permitted_grid_sizes);
int min_permitted_grid_size = Integer
.parseInt(permitted_grid_sizes[0]);
int max_permitted_grid_size = Integer
.parseInt(permitted_grid_sizes[permitted_grid_sizes.length - 1]);
if ((grid_size < min_permitted_grid_size) || (grid_size > max_permitted_grid_size)) {
throw new IllegalArgumentException(
"specified grid size (" grid_size ") out of range");
}
// Initialise metadata
this.id = id;
this.grid_size = grid_size;
// Initialise a blank grid
this.grid = new Character[this.grid_size][this.grid_size];
for (int row = 0; row < this.grid_size; row ) {
for (int col = 0; col < this.grid_size; col ) { // Gives warning "Condition 'col < this.grid_size' is always 'true'"
this.grid[row][col] = UNKNOWN; // Gives warning "Array index is out of bounds" on [row]
}
}
}
...
}
Комментарии:
1. Сохраняется ли проблема при перезапуске Android Studio? На первый взгляд кажется, что это проблема с их стороны
2. Похоже, это ошибка в Android Studio. Изменение поля
grid_size
сprivate Integer grid_size;
наprivate int grid_size;
удаляет предупреждение.
Ответ №1:
Я считаю, что проблема связана с вводом переменных. Поле grid_size
имеет класс Integer, и вы сравниваете его с row
и col
которые имеют примитивный тип ‘int’.
grid_size == row
сравнивает ссылку со значением.
Вероятно, происходит то, что ваша среда IDE обнаруживает эту проблему, но выдает вам неточные предупреждения.
Если вы перейдете grid_size
на примитивный тип int
, предупреждения должны исчезнуть.