for(char c : array) { if (c== 'o') c = 'a'; } System.out.println(newString(array)); //How come this does NOT print out bass?It prints boss.
Переведено автоматически
Ответ 1
Вы меняете переменную итерации c. Это не меняет содержимое массива. Переменная итерации - это просто копия элемента массива. Если вы хотите изменить массив, вам нужно сделать это явно:
for (inti=0; i < array.length; i++) { if (array[i] == 'o') { array[i] = 'a'; } }
for (inti=0; i < array.length; i++) { charc= array[i]; if (c == 'o') { c = 'a'; } }
Изменение значения локальной переменной никогда ничего не изменит - оно просто изменяет локальную переменную. Присвоение:
charc= array[i];
копирует значение из массива в локальную переменную. Это не связывает локальную переменную с элементом массива постоянно.
Ответ 2
Это связано с тем, что c = 'a' присваивается a локальной переменной, c которая не ссылается на фактическое значение, присутствующее в этом индексе самого array. Он просто содержит копию значения, присутствующего в указанном индексе array. Таким образом, изменение фактически производится в локальной переменной, а не в фактическом местоположении, на которое array[i] ссылается.. Если вы хотите изменить значение, вам действительно следует использовать следующее:
inti=0; for(char c : array) { if (c== 'o') array[i] = 'a'; i++; }
Ответ 3
значение c является копией значения в массиве. Обратитесь к массиву напрямую, чтобы изменить соответствующее значение.
Ответ 4
Ваша переменная c изменяется, но не содержимое массива. Чтобы изменить массив, не используйте c, манипулируйте массивом напрямую.
for(inti=0; i < array.length; i++) { charc= array[i]; if (c== 'o') array[i] = 'a'; }