【问题标题】:Why is i++ looping twice here?为什么 i++ 在这里循环两次?
【发布时间】:2014-12-29 14:14:14
【问题描述】:

当下面的代码执行 i=0, j=0 and length = 9 and loops = 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、值 q3 和 val5。

你现在明白我的问题了吗?

【问题讨论】:

  • Ewww;你为什么不直接break 如果i &gt;= length 而不是让.addInMappedElement() 处理null?
  • 你的意思是在 2 次迭代后循环停止, j=2 和 i=10 ?
  • 我自己写的! :|
  • @fge 我这样做了多少次?我 >= 长度;每行之后?我不认为这看起来很棒!
  • MyHelper.addInMappedElement 是做什么的?

标签: java for-loop iteration


【解决方案1】:

您在每次迭代中有 4 个 i++ 语句,因此它实际上最多增加 4 倍(只要 i&lt;length)。

【讨论】:

  • 取决于长度的原始值,我猜是2
  • 我知道我应该在完成一个循环后增加 4 倍,但这里不是这种情况。例如:如果数组是 [Value1 , value2 , value 3 , value 4, Value5 , value12 , value q3 , value w4, val5] 我在最终结果中映射的只是 value 3 ,Value5, value q3 和 val5。你现在明白我的问题了吗?
【解决方案2】:

i++ 等同于:

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

i 在您的代码中增加 4 倍。

【讨论】:

    【解决方案3】:

    解决了:

     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-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 2023-01-13
      • 2018-09-12
      • 2011-03-04
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      相关资源
      最近更新 更多