Вложенные ссылки на массив
В настоящее время я изучаю Java онлайн, и меня смущает следующий код и то, для чего оценивается один из элементов в массиве:
int[] a = new int[]{9, 8, 3, 1, 5, 4};
for (int i = 0; i < a.length; i++) {
if (a[i] % 2 == 0) {
a[i] += 1;
} else if (a[i] < a.length) {
a[i] += a[a[i]];
}
}
Я смотрю на a[3]
и число, к которому это относится, и когда я отлаживаю код, моя IDE показывает, что a[a[i]]
оценивает к 9
, в этом я немного запутался.
Я думал, что a[3]
будет равен 1
, а затем a[1]
будет равен 8
, однако, похоже, это не так. Может ли кто-нибудь внести ясность, поскольку курс Академии JetBrains не относится к этому.
Ответы
Ответ 1
Обратите внимание на первое условие - if (a[i] % 2 == 0) {a[i] += 1;}
- это вызывает увеличение четных значений. Поэтому a[1]
увеличивается с 8
до 9
.
Теперь, когда i==3
, a[a[i]]
оценивается как a[1]
, что равно 9
. Затем вы добавляете его к исходному значению a[3]
(обратите внимание, что оператором является +=
, а не =
), поэтому a[3]
становится 1 + 9
, то есть 10
.
Ответ 2
int[] a = new int[] {9, 8, 3, 1, 5, 4};
for (int i = 0; i < a.length; i++){
if (a[i] % 2 == 0)
a[i] += 1;
else if(a[i] < a.length)
a[i] += a[a[i]];
}
|i | a[i] old | a[i] % 2 | a[i] < a.length | a[a[i]] | a[i] new |
|--|----------|----------|-----------------|---------|----------|
|0 | 9 | - | - | NaN | 9 |
|1 | 8 | + | - | NaN | 9 |
|2 | 3 | - | + | 1 | 4 |
|3 | 1 | - | + | 9 | 10 |
|4 | 5 | - | + | 4 | 9 |
|5 | 4 | + | - | 9 | 5 |
// a = {9, 9, 4, 10, 9, 5};
Я думал, что a[3]
будет равно 1
Это правильно, на шаге 3
, a[3] = 1
и тогда a[1]
будет равен 8
Это не правильно, потому что на шаге 1
оно было увеличено до 9
Ответ 3
Все хорошо.
Лучший способ увидеть, что вы делаете, - это debuggin
(в данном случае рисование)
ваш код:
int[] a = new int[] {9, 8, 3, 1, 5, 4};
for (int i = 0; i < a.length; i++){
if (a[i] % 2 == 0){
System.out.printf(a[i]);
a[i] += 1;
System.out.printf(a[i]);
}else if(a[i] < a.length){
System.out.printf(a[i]);
a[i] += a[a[i]];
System.out.printf(a[i]);
}
И вы увидите более ясно. Иногда лучше самим стоять лицом к стене, потому что одна из лучших практик - это узнать о вас. Удачи!.