2016-04-25 2 views
1

Я не могу понять, почему myArray[i] в нижеприведенной программе печатает только 0 три раза.Значения в массиве при вставке в цикл

int[] myArray = new int[6]; 
for (int i = 0; i <= 5; i++) { 
    myArray[i] = i++; 
    System.out.println("myArray:"+myArray[i]); 
    //need to know how to print this object myArray[i]?  
} 
System.out.println("Outside for" +Arrays.toString(myArray));  

Мой вывод:

myArray:0 
myArray:0 
myArray:0 
Outside for[0, 0, 2, 0, 4, 0] 

Я не понимая, почему myArray всегда 0 ..

ответ

1

Значение по умолчанию int в java равно нулю. Поэтому ваш массив int инициализируется равным нулю во всех его индексах. Во время первой итерации вашего цикла следующего ваших переменные состояния ...

myArray = [0, 0, 0, 0, 0, 0]; 
i = 0; 

значение я = 0, следовательно, ноль вставляются в туАггау [0]. Тогда i увеличивается. теперь вы печатаете значение myArray [1], которое равно «0». В конце цикла следующее является состояние переменного ...

myArray = [0, 0, 0, 0, 0, 0]; 
i = 1; 

теперь значение I увеличивается на цикл и значение я становлюсь 2. Теперь вы вставляете значение- это myArray [2]. а затем значение i увеличивается из-за оператора post increment.После выполнения цикла это состояние ваших переменных.

myArray = [0, 0, 2, 0, 0, 0]; 
i = 3; 

теперь значение I увеличивается на цикл и значение I становится 4.now вы вставив значение 4 туАггау [4]. а затем значение i увеличивается из-за оператора post increment. После выполнения цикла это состояние ваших переменных.

myArray = [0, 0, 2, 0, 4, 0]; 
i = 5; 

В настоящее время значение i увеличивается и условие для цикла прерывается. то вывести значение массива ... которые Выходы, следующие данные ...

Outside for[0, 0, 2, 0, 4, 0] 

из-за операции после приращения вашего значения туАггау всегда печатает значение следующей позиции. Поскольку значение int по умолчанию равно нулю, вы всегда получаете нулевой результат печати.

Если вы удалите операцию приращения сообщения, я думаю, вы найдете то, что пытались. и следующая ссылка содержит как прирост работает в Java ...

link

вот ссылка о том, как отлаживать приложения с помощью Eclipse IDE ...

link

0

Вы должны присвоить значение с i+1, в противном случае переменная оленья кожа сохранить новый значение и пропустить несколько шагов в цикле. Вот почему он петли только 3 раза, а не 6 раз, вы увеличиваете i++ на двух местах, которые влияют на ваш цикл. Так что это:

myArray[i]=i+1; 

Или просто добавьте i в массив, это зависит от вас:

myArray[i]=i; 

Подробнее о префиксов и постфиксных операторов here.

+0

Upvote и downvote? Довольно забавно, однако я не понимаю, почему. –

1

Проблема заключается в том, что вы увеличиваете i в двух разных местах. Одна из них здесь:

for (int i=0;i<=5;i++) { 

Другой здесь:

myArray[i]=i++; 

Удалите ++ из второго и он должен работать нормально.

0

Нет необходимости увеличивать i дважды. То есть i увеличивается в цикле for , а также в первой строке цикла. Также обратите внимание, что когда вы назначаете значение внутри цикла, значение i присваивается в с индексом, а затем увеличивается.

int[] myArray=new int[6]; 
for (int i=0;i<=5;i++) { 
    // myArray[i]=i++; Do not increment i here 
    myArray[i]=i; 
    System.out.println("Value at "+i+"th index in myArray: "+myArray[i]);  
} 
System.out.println("Outside for" +Arrays.toString(myArray)); 
0

Это то, что происходит: int[] are initialized with 0

LOOP1: i = 0 
Array gets assigned with 0 and i becomes 1 
Then i++ increments i to 2 

LOOP2: i = 2 
myArray[2] = 2 (note that myArray[1] is still 0) and i becomes 3 
Then i++ increment i to 4 

LOOP3: i = 4 
myArray[4] = 4 (myArray[3] is still 0) and i becomes 5 
Then i++ increments i to 6 

Loop terminates. 

Окончательный результат в массиве: [0, 0, 2, 0, 4, 0]

Вы можете посмотреть другие ответы на пути исправления этой проблемы.

1

Ну, уведомление что место, где вы положили значение I ++, не является значением, которое вы печатаете:

Для примера, на первой итерации, I = 1 Итак, вы ввели в myarr [1] значение 2. На данный момент значение I равно 2, поэтому, когда вы хотите напечатать мой arr [i], вы печатаете на месте 2, которое равно 0.

Смежные вопросы