【问题标题】:why does the index increases before looping为什么在循环之前索引会增加
【发布时间】:2014-02-04 17:56:29
【问题描述】:

在我想要它之前/在它执行整个 for 循环块之前,我无法弄清楚为什么 for 循环计数器会增加。我在代码中添加了用于调试的打印语句,代码如下:

public void findSubSeq() {
    temp = new ArrayList<Integer>();
    temp.add(vals.get(0));
    for (int i = 0; i < (vals.size()-2); i++) {
        System.out.println(i + " index in array, for");
        if (vals.get(i) < vals.get(i++)) {
            System.out.println(i + " index in array, if 1");
            temp.add(vals.get(i++));
            System.out.println(i + " index in array, if 2");
            System.out.println(this.getlargest());
        }
        else {
            System.out.println(i + " index in array, else 1");
            compareALs();
            System.out.println(i + " index in array, else 2");
            temp.add(vals.get(i++));
            System.out.println(i + " index in array, else 3");
            System.out.println(this.getlargest());
        }
    }
}

在代码运行中,我们可以看到计数器 i 在 for 循环结束之前增加。我真的很困惑。我还尝试了一个 for-each 循环,结果相似。 这是运行: 在创建 subarrayB 之前

在填充之前

输入文件:inp

[1, 2, 3, 0, 4, 5]

在 findSubSeq 之前

数组中的0索引,用于

数组中有1个索引,否则为1

数组中有1个索引,否则为2个

数组中有2个索引,否则为3

[1]

数组中的3个索引,用于

数组中有4个索引,否则为1

数组中有4个索引,否则为2个

数组中有5个索引,否则为3

[1]

【问题讨论】:

  • 为什么要投反对票?他显然试图理解错误来自哪里......

标签: java for-loop arraylist


【解决方案1】:

你有vals.get(i++),它增加了i。以这种方式使用时,++ 是一个后自增运算符。

【讨论】:

  • 附带说明:i++ 将使用 i 的值,然后将其递增。如果您使用 ++i ,该值将首先递增,然后计算。
  • 这是你永远不应该做的真正糟糕的事情之一。
  • @Hannes 真的很糟糕吗?为什么?
  • @Fabinout 我指的是在循环中增加 for 循环计数器的方法。永远不要修改 for 计数器。
【解决方案2】:

您确实需要避免在循环中使用 i++。这就是导致您的索引变量在您不期望时增加的原因。例如,您的代码会这样做:

if (vals.get(i) < vals.get(i++))

我认为你真的很想这样做:

if (vals.get(i) < vals.get(i+1))

同样,当你添加到 temp 时,你真的不想做 i++,你想做:

temp.add(vals.get(i+1));

【讨论】:

    【解决方案3】:
    if (vals.get(i) < vals.get(i++))
    

    语句类似于x &lt; x,因为在get 调用之后会产生增量。

    使用

    if (vals.get(i) < vals.get(++i))
    

    如果要比较第 i 个和第 i+1 个元素。

    第二个:i在一个周期内有3个增量i。一个在for 循环中,第二个在if 和3-d,在add。是你计划好的吗?

    【讨论】:

      猜你喜欢
      • 2013-09-14
      • 2012-09-02
      • 2013-10-23
      • 2014-01-31
      • 2019-11-03
      • 2021-06-04
      • 2021-03-21
      • 2017-08-30
      • 1970-01-01
      相关资源
      最近更新 更多