-1

我有2个这样的循环

goodexpressions 和 badexpressions 是字符串数组

for(int i =0; i < goodexpressions.length; i++) {}

&

for(int j =0; j < badexpressions.length; j++) {}

我试图在一个循环中声明这两个,到目前为止我已经知道了,但它不正确

for(int b = 0 , c = 0; b < goodexpressions.length; b++ c < badexpressions.length; c++)

我应该怎么做才能更正这个说法?

4

3 回答 3

2

尽管您尝试做的事情似乎是个坏主意,但这里有一段代码可以工作。我不知道它是否完全符合您的要求,因为这对我来说并不完全清楚。

for(int b = 0, c = 0; b < goodexpressions.length || c < badexpressions.length; b++, c++) { }

但是,在执行此操作时,您仍然必须检查是否bc是否在数组索引范围内。您也可以将 替换为||&&在这种情况下您将不再需要这样做,但如果数组的长度不相等,您将丢失一些项目。

于 2013-07-14T15:51:19.827 回答
1

根据您想要实现的目标,您应该执行以下操作之一。假设您有两个列表A,并且B...

如果要循环遍历两个列表A和中的所有元素B,请创建一个新列表或数组,保存两个列表的元素并遍历该列表。

for (int i = 0; i < combinedAandB.length; i++) {
    ...
}

如果要遍历list和 list中的所有元素组合,则必须使用嵌套循环。AB

for (int i = 0; i < A.length; i++) {
    for (int k = 0; k < B.length; k++) {
        ...
    }
}

更新:关于您的问题中的双变量 for 循环方法和其他两个答案:请注意,由于这两个变量在循环的每次迭代中都将采用完全相同的值,因此您也可以只使用一个变量:

for (int i = 0; i < goodexpressions.length || i < badexpressions.length; i++) { }

但也请注意,这对避免代码重复没有任何好处,因为您仍然需要对这两个goodexpressions[i]badexpressions[i]. 更好的方法可能是编写一个方法来保存循环并调用该方法一次 withgoodexpressions和一次 with badexpressions

于 2013-07-14T15:52:29.637 回答
1

我认为这将满足您的要求:

for (int b = 0, c = 0; 
     b < goodexpressions.length && c < badexpressions.length; 
     b++, c++)

请注意,旧式for循环中恰好有 2 个分号分隔符。

根据您的评论,我认为这可能会更好:

for (int i = 0; i < Math.min(goodexpressions.length, badexpressions.length); i++)

笔记:

  1. 完全不清楚循环体要做什么。这将确定组合循环的正确方法......或者如果将它们组合起来只是一个坏主意。

  2. 上面的代码被设计为在两个长度中的较小者处停止。如果您想停在较大的位置,请更改&&||和。但是,如果您这样做,您还需要注意避免数组边界异常。minmax

  3. 除非打算同时使用两者goodexpression[i]badexpression[i]例如比较它们、组合它们等等),否则如果您使用两个单独的循环,您的代码将更具可读性和效率。

  4. 另一种可能性可能是简单地检查两个数组是否具有相同的长度。

于 2013-07-14T15:54:57.130 回答