在for()循环中声明2个变量

时间:2013-07-14 15:43:54

标签: java

我有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++)

我该怎么做才能纠正这个陈述?

3 个答案:

答案 0 :(得分:2)

虽然你想要做的事情似乎是一个坏主意,但这里有一段代码可行。我不知道它是否完全符合您的要求,因为这对我来说并不完全清楚。

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

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

答案 1 :(得分:1)

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

如果要遍历列表AB中的所有元素,请创建一个新列表或数组,其中包含两个列表的元素并循环遍历该列表。

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

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

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]的所有内容。更好的方法可能是编写一个持有循环的方法,并使用goodexpressions调用该方法一次,使用badexpressions调用一次。

答案 2 :(得分: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. 上述代码设计为在两个长度中较小的一个处停止。如果您想停留在较大的位置,请将&&更改为||,将min更改为max。但是,如果这样做,还需要注意避免数组边界异常。

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

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