【问题标题】:Java for each loops reading from arraylist calling method [closed]从arraylist调用方法读取的每个循环的Java [关闭]
【发布时间】:2018-08-28 18:18:51
【问题描述】:

This is each array list and reading in and making changes to be stored in each list我正在尝试从单独的数组列表中读取以遍历它们,并在最后将每个迭代用作方法调用中的参数。但是,它会在第一级(字段)的每次迭代中进行调用,然后在第二级(setter)进行调用,依此类推。我需要找到一种方法让它们迭代并为数组列表大小的方法获取每个参数的正确索引。

目前,如果每个列表中有 3 个项目,则第一个 for 循环将遍历方法调用中的所有 3 个项目,然后再进入第二个循环。因此,我将迭代第一个列表,而其他 3 个则不会。然后,第一个将保持不变,第二个参数(列表)将迭代。Sample Output Currently, red underlines are where other changes SHOULD be happening

我希望将每个数组中的每个项目一起调用,一次全部在索引 0 处,然后全部在索引 1 处,依此类推。这将为我提供一个理想的输出,即从文本文件中读取字段列表,并生成单元测试以节省时间。

    for (int counter = 0; counter < fields.size(); counter++) {
  String field = fields.get(counter);

    for (int iterator = 0; iterator < setters.size(); iterator++) {
      String setter = setters.get(iterator);

        for (int tickah = 0; tickah < methodName.size(); tickah++) {
          String updatedMethodName = methodName.get(tickah);

            for (int wicked = 0; wicked < fields.size(); wicked++) {
              String updatedFieldNames = updatedFieldName.get(wicked);
              creatingMethod(updatedMethodName, updatedFieldNames, field, setter);

      }
  }
}

【问题讨论】:

  • 您能否再次为我们澄清一下,您想要什么行为以及您实际看到的是什么?也许别人很清楚,但我怕我不是很清楚
  • @HovercraftFullOfEels 我和你在一起 :-)
  • 是的,对不起。因此,我在最后使用这些参数调用了该方法,并且我想从相应的 arrayList 中读取每个项目以用作方法调用中的参数。因此,第一次调用时每个索引为 0,第二次调用索引为 1,依此类推。这有帮助吗?
  • @CaptainChief - 您能否更新您的问题并提供一些示例列表和一些示例输出(预期与当前)?我们很乐意提供帮助,但很难理解您在这里提出的问题。
  • 太好了,很高兴你有一个解决方案,但在未来,也许让我们更容易理解你的问题并回答你。您确实看到他必须猜测并提供 两个 解决方案,因为您的问题仍然不清楚。

标签: java for-loop arraylist


【解决方案1】:

我在这里可能是错的......但根据您的评论:

是的,对不起。所以我最后有那个方法调用 参数,我想从各自的 arrayList 用作方法调用中的参数。所以索引 0 从 第一次调用时每个,第二次调用索引 1,依此类推。这样做 帮忙?

听起来您要么想使用单个循环并在每个数组列表上重复使用计数器:

for (int i = 0; i < fields.size(); i++) {
    String field = fields.get(i);
    String setter = setters.get(i);
    String updatedMethodName = methodName.get(i);
    String updatedFieldNames = updatedFieldName.get(i);
    creatingMethod(updatedMethodName, updatedFieldNames, field, setter);
}

或者,听起来您可能想要做更多的笛卡尔积,在其中您完全循环遍历每个单独的列表...在这种情况下,您应该每次都使用每个列表的大小而不是 fields.size() .

for (int counter = 0; counter < fields.size(); counter++) {
    String field = fields.get(counter);
    for (int iterator = 0; iterator < setters.size(); iterator++) {
        String setter = setters.get(iterator);
        for (int tickah = 0; tickah < methodName.size(); tickah++) {
            String updatedMethodName = methodName.get(tickah);
            for (int wicked = 0; wicked < updatedFieldName.size(); wicked++) {
                String updatedFieldNames = updatedFieldName.get(wicked);
                creatingMethod(updatedMethodName, updatedFieldNames, field, setter);
            }
        }
    }
}

【讨论】:

  • 太棒了,您的最佳解决方案奏效了。我应该改用单循环。我有点新,所以我想我必须用单独的计数器/等遍历它们。谢谢一群人!
  • 仅作记录:四级嵌套循环。这导致 O(n^4) 和非常 unclean 代码。颤栗....
  • 哦,绝对的,我知道,这是一种 MVP 类型的方法,我试图快速提出以防止我写出 1000 多个单元测试
  • 没问题。 +1 用于清理您的问题。所以很好,但总是尽量让你的问题尽可能简单,以帮助每个人:)。添加一些示例输入数据/等并清除预期输出总是非常有帮助。
  • 好吧,我觉得有道理,注意! :)
猜你喜欢
  • 2012-12-26
  • 1970-01-01
  • 2013-12-22
  • 2020-08-10
  • 2020-06-07
  • 2014-11-17
  • 2015-03-15
  • 2010-10-11
  • 1970-01-01
相关资源
最近更新 更多