2014-12-29 3 views
0

Когда ниже код выполняется я = 0, у = 0 и длина = 9 и петли = 3Почему i ++ повторяется дважды?

Удивительно с каждой строки, я вырос на 2, а не 1.

Можете ли вы сказать, почему?

 String arr[] = stringToSplit.split(delimiter); 
     int length = arr.length; 
     int loops = length/4+length%4; 
     for(int i=0,j=0; j<loops && i<length; j++){ 
      DummyClass dummyClass= new DummyClass(); 
      MyHelper.addInMappedElement(i<length?arr[i++]:null, value1, dummyClass) ; 
      MyHelper.addInMappedElement(i<length?arr[i++]:null, value2, dummyClass) ; 
      MyHelper.addInMappedElement(i<length?arr[i++]:null, value3, dummyClass) ; 
      MyHelper.addInMappedElement(i<length?arr[i++]:null, value4, dummyClass) ; 
     } 

Примечание: Я знаю, что я должен быть приращением 4 раза после завершения одного цикла, но это не тот случай. Например: если массив равен [Value1, value2, value 3, value 4, Value5, value12, value q3, value w4, val5]

То, что я получил в моем конечном результате, это просто значение 3, Value5, value q3 и val5.

Возникает вопрос?

+4

Ewww; почему бы вам просто не «ломать», если 'i> = length' вместо' .addInMappedElement() 'handle null? – fge

+0

Вы имеете в виду, что после 2-й итерации петли останавливаются, j = 2 и i = 10? – Tensibai

+0

Я написал это сам! : | – Dish

ответ

0

Получили исправление:

for(int i=0,j=0; j<loops && i<length; j++){ 
     DummyClass dummyClass= new DummyClass(); 
     MyHelper.addInMappedElement(i<length?arr[i++].toString():null, value1, dummyClass) ; 
     MyHelper.addInMappedElement(i<length?arr[i++].toString():null, value2, dummyClass) ; 
     MyHelper.addInMappedElement(i<length?arr[i++].toString():null, value3, dummyClass) ; 
     MyHelper.addInMappedElement(i<length?arr[i++].toString():null, value4, dummyClass) ; 
    } 

B-)

3

У вас есть 4 i++ операторов на каждой итерации, поэтому он фактически увеличивается до 4 раз (до i<length).

+0

В зависимости от исходного значения длины, которое я угадываю, это 2 – tddmonkey

+0

. Я знаю, что я должен увеличивать 4 раза после завершения одного цикла, но здесь это не так. Например: если массив равен [Value1, value2, value 3, value 4, Value5, value12, value q3, value w4, val5] То, что я получил в моем конечном результате, - это просто значение 3, Value5, значение q3 и val5. Возникает вопрос? – Dish

1

i++ так же, как:

int temp = i; 
i = i + 1; ← i is actually changed ¯\_(ツ)_/¯ 
return temp; 

i увеличивается в 4 раза в коде.