【问题标题】:Java for loop needs to pick up where it left offJava for 循环需要从中断的地方重新开始
【发布时间】:2017-04-29 02:19:20
【问题描述】:

我需要第二个 for 循环从中断处继续。每次if 语句为true 时,我都需要一个槽来填充第一个for 循环中使用的数组。但我不希望继续添加相同的键值。我需要第二个for 循环来移动到下一个键值。 (在下面的代码中,arrl 是一个有值对象的 ArrayList)

int temp = 0;
int count = 0;
for(int i = 0; i < eeVal.length; i++)
{
    count= 0;
    for(int j = temp; j < arrl.size(); j++)
    {
        if(arrl.get(j).getValue() == 1 && count == 0)
        {
            eeVal[i] = arrl.get(j);
            count++;
            temp=j;
        }
    }
}
}
return eeVal;

【问题讨论】:

  • 为什么不给j加一呢? j++
  • 我不知道它会在哪里离开@Thrasher
  • 请说明你在做什么。你有一个数组和 2 个列表,2 个索引...... arrl 和 arr 大小相同吗?这样做的目的是什么?
  • 错字我修正了
  • 您在搜索continue 关键字吗?

标签: java arrays for-loop arraylist methods


【解决方案1】:

您需要另一个变量来跟踪内部循环到达的位置。类似于以下内容:

int temp = 0;

for(int i = 0; i < eeVal.length; i++)
{
    for(int j = temp; j < arrl.size(); j++)
    {
        if(arrl.get(j).getValue() == 1)
        {
            eeVal[i] = arrl.get(j);
        }
      temp=j;
    }
}
}
return eeVal;

这样,一旦外部循环第二次运行,内部循环将从“temp”开始直到循环结束。

【讨论】:

  • 我希望我正确理解了您的问题...您可能还需要更改 eeVal[temp] = arrl.get(j) 以便您可以存储正确的索引。
  • 你做到了。我更新了原始问题中的代码,因为它仍然无法正常工作
  • 尝试将 eeVal[i] 更改为 eeVal[temp]
【解决方案2】:

根据您的解释,听起来您不想要内部 for 循环。 arrl 的遍历需要手动控制变量,例如`cnt',只有当你的递增条件满足时才会递增。

【讨论】:

    【解决方案3】:

    您可能正在寻找的是List

    在您的回答中,您不需要第一个循环。不过这个有问题 - 索引 i 可能超出范围。

    int i = 0;
    for(int j = 0; j < arrl.size(); j++) {
        if(arrl.get(j).getValue() == 1) {
            eeVal[i++] = arrl.get(j);
        } 
    } 
    return eeVal;
    

    您需要的是动态集合,例如 List。 使用列表(我将类型称为 MyType)。

    List<MyType> vals = new ArrayList<>();
    for(MyType item : arrl) {
        if(item.getValue() == 1) {
            vals.add(arrl.get(j));
        } 
    } 
    return vals.toArray(new MyType[vals.size()]);
    

    【讨论】:

      【解决方案4】:

      代码正在获取最后一个正确值所在的位置。当我想知道我在哪里停下来时,我需要在 j 上加 1。

      int count2 = 0;
      int progress = 0;
      for(int i = 0; i < retVal[h].length; i++)
      {
          count2 = 0;
          for(int j = progress; j < arr.size(); j++)
          {
              if(arr.get(j).getLevel() == h && count2==0)
              {
                  retVal[h][i] = arr.get(j);
                  count2++;
                  progress = j+1;
              }
          }
      }
      return retVal;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-01
        • 1970-01-01
        • 2021-12-18
        • 1970-01-01
        • 1970-01-01
        • 2019-03-30
        相关资源
        最近更新 更多