2016-07-11 9 views
1

Рассмотрим:разница между я ++ и я + 1 в массиве подсчитывать

int[] aryNums=new int[5]; 

for (int i=0; i<=5; i++) 
{ 
    aryNums[i] = i++; 
    System.out.println(aryNums[i]); 
} 

Почему это не дает мне значения в массиве, как 1, 2, 3, 4, 5? Вместо этого он дает исключение, такое как 0,0 и ошибка.

А также, если я изменю

aryNums[i] = i++; \to 

aryNums[i] = i+1; 

Я получаю значение {1,2,3,4,5} в массиве. В чем разница между i ++ и i + 1 здесь?

ответ

2

В первом вы увеличиваете i внутри цикла, а также часть обновления цикла. Во втором случае вы просто создаете новое целое число, когда вы вызываете i+1, не влияя на значение, хранящееся в i.

Выражение i++ обновляет значение, хранящееся в i, тогда как экспрессия i+1 возвращает новое значение, не влияя на значение, хранящееся в i.

7

++ - оператор, который изменяет значение «i» на 1. Это сокращенная нотация i = i + 1.

i + 1 - инструкция добавления, которая возвращает то, что обычно будет, но она не меняет значение i, потому что я не переназначен.

Причина вы получаете ошибки, потому что i++ использует i перед увеличением его, в то время как, если вы хотите использовать его после того, как увеличивающиеся, вам нужно использовать ++i (приращение, а затем использовать). Так как i++ также увеличивает ваш счетчик, некоторые значения будут пропущены.

+0

Третий пункт является очень важное дополнение к первому, поскольку оно объясняет разницу между операторами до и после инкремента. – nasukkin

3

a = i++; равна a = i; i = i + 1;

int[] aryNums=new int[5]; //array index starts from 0, so last index is "4" 

for (int i=0; i<=5; i++) // 0, 1, 2, 3, 4, "5" -> out of bounds 
{ 
    aryNums[i]=i++; //i++ -> first put the i to arrNums[i], "then" increase i 
    System.out.println(aryNums[i]); 
} 

Solutions:

  • Удалить = из i <= 5
  • Изменение aryNums[i]=i++ в aryNums[i] = i + 1