Может кто-нибудь объяснить, как это работает? - PullRequest
0 голосов
/ 24 февраля 2020
int[] a = {1, 2, 3,4,1};
for (int n: a) {
    a[n] = 0;
}
for (int n: a) {
    System.out.print(n);
}

Это для каждого l oop, показывающего что-то неожиданное, когда я делаю все элементы массива 0. Вместо того, чтобы показывать все '0', он выдает что-то вроде '00301'. Не в состоянии понять, как это за работой?

Ответы [ 5 ]

2 голосов
/ 24 февраля 2020

Как указано в документации Oracle, java для каждого l oop скрывает итератор и дает вам доступ только к значениям в итерируемом (массиве). Следовательно, для каждого l oop не следует использовать для mainupulation исходного массива, а следует использовать для работы с данными массива. https://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html Если вы хотите манипулировать исходным массивом, лучше всего использовать обычный для l oop.

2 голосов
/ 24 февраля 2020

a[n] = 0; устанавливает a[some_value_from_the_array] на 0, а не все элементы массива на 0.

1 голос
/ 24 февраля 2020

In:

for (int n: a) 

n - это значение определенного индекса массива, не сам индекс . Итак, вы в основном устанавливаете 0 на индекс 1, 2, 3,4,1. К счастью, нет значения больше 4 (длина массива) или отрицательного числа, иначе вы получите ArrayIndexOutOfBoundException.

for (int i=0; i<a.length;i++){
  a[i] = 0;
} 

Используйте приведенный выше код, и вы получите ожидаемый результат.

1 голос
/ 24 февраля 2020

Это два цикла for-each над содержимым int[].

L oop 1: для каждого n в 1, 2, 3, 4, 1 установите содержимое массива на ноль для индексов 1, 0, 3, 0 и 1. Что вы можете увидеть, изменив его на

for (int n: a) {
    System.out.println(n);
    a[n] = 0;
}

Оставляя содержимое a как 0, 0, 3, 0, 1, затем

L oop 2: для каждого n в 0, 0, 3, 0, 1 печати n.

Таким образом, ваша программа печатает 00301.

0 голосов
/ 24 февраля 2020

Если вы распечатаете, что он делает, вы увидите сами:

int[] a = {1, 2, 3,4,1};
System.out.println(Arrays.toString(a));
for (int n: a) {
    System.out.print("a[" + n + "] = 0;  ->  ");
    a[n] = 0;
    System.out.println(Arrays.toString(a));
}

Вывод

[1, 2, 3, 4, 1]
a[1] = 0;  ->  [1, 0, 3, 4, 1]
a[0] = 0;  ->  [0, 0, 3, 4, 1]
a[3] = 0;  ->  [0, 0, 3, 0, 1]
a[0] = 0;  ->  [0, 0, 3, 0, 1]
a[1] = 0;  ->  [0, 0, 3, 0, 1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...