【问题标题】:Java for loop, getting objects parameters from arraylist [duplicate]Java for循环,从arraylist获取对象参数[重复]
【发布时间】:2020-05-01 06:27:11
【问题描述】:

在这个循环中有一个错误“The value changed at i++ is not used”。

for (technique j : activeuser.techniques) {
    int i = 1;
    i = i++;
    System.out.print(i + j.tname + " and ");
}

这里的上下文并不重要,所以剩下的代码我就不写了。 你能解释一下这个循环是如何工作的吗?我了解其他循环,但找不到该循环的解释,谢谢。

【问题讨论】:

标签: java


【解决方案1】:

您需要定义 i 变量 outside 的 for 循环并且不需要 assing i = i++;

int i = 1;
for( technique j : activeuser.techniques  ) {                  
    i++;
    System.out.print(i + j.tname + " and ");

 }

【讨论】:

  • "并且不需要评估i = i++; - 不仅不需要它,而且i = i++ 之后的错误将没有可见效果(由于后增量)。
【解决方案2】:
      for( technique j : activeuser.techniques  ) {
            int i = 1;  // for every loop you are resetting the i's value to 1
            i = i++;   // it is expanded to i = i; i=i+1;
            System.out.println("---"+i);
            System.out.println(i + j.tname + " and ");

        }

【讨论】:

    【解决方案3】:

    关于后缀变化(递增/递减)运算符,请注意以下几点:

    1. 后缀运算符将值分配给左操作数,然后更改其值。
    2. 如果左操作数的变量与右操作数的变量不同,则左操作数的变量将具有带后缀的变量(即右操作数的变量)的原始值和右操作数将具有更改后的值。
    3. 如果左操作数的变量与右操作数的变量相同,则该变量将继续具有原始值,即更改不会产生任何影响。虽然在技术上是允许的,但它会造成混淆,并可能导致您的程序/应用程序出现错误。

    在您的情况下,您已经完成了第 3 点中提到的操作。在此分配之后,i 将继续具有值 1

    int i = 1;
    i = i++;
    

    除此之外,由于您将这两行放在一个循环下,因此每次循环迭代时,都会重新创建变量i。换句话说,旧的i 死了,新的i 诞生了,初始值为1

    但是,即使您在循环外声明 i 并为其分配值 1(即 i = 1),其值也会在循环的 eadh 迭代中重置。如果您打算保留i 的值,则需要在for 循环之外声明并初始化它,例如如下:

    int i = 1;
    for (technique j : activeuser.techniques) {                  
        i++;
        System.out.print(i + j.tname + " and ");
    }
    

    请注意,由于您没有将 i 的值分配给任何变量,因此在上面给出的代码中使用 ++ii = i + 1 将具有相同的效果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-28
      • 2012-08-08
      • 1970-01-01
      相关资源
      最近更新 更多