我有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++)
我该怎么做才能纠正这个陈述?
答案 0 :(得分:2)
虽然你想要做的事情似乎是一个坏主意,但这里有一段代码可行。我不知道它是否完全符合您的要求,因为这对我来说并不完全清楚。
for(int b = 0, c = 0; b < goodexpressions.length || c < badexpressions.length; b++, c++) { }
但是,在执行此操作时,您仍需检查b
和c
是否在数组索引范围内。您也可以将||
替换为&&
,在这种情况下您将不再需要这样做,但如果数组的长度不同,您将丢失一些项目。
答案 1 :(得分:1)
根据您要实现的目标,您应该执行以下操作之一。假设您有两个列表A
和B
...
如果要遍历列表A
和B
中的所有元素,请创建一个新列表或数组,其中包含两个列表的元素并循环遍历该列表。
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++)
注意:
根本不清楚循环体将要做什么。这将决定合并循环的正确方法......或者如果将它们组合起来只是一个坏主意。
上述代码设计为在两个长度中较小的一个处停止。如果您想停留在较大的位置,请将&&
更改为||
,将min
更改为max
。但是,如果这样做,还需要注意避免数组边界异常。
除非意图同时使用goodexpression[i]
和badexpression[i]
(例如比较它们,合并它们等等),否则您的代码将更具可读性和效率如果你使用两个单独的循环。
另一种可能是简单地检查两个数组是否具有相同的长度。