2013-07-14 152 views
-1

我有2个循环这样声明2个变量在for()循环

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

我应该怎么做才能纠正这种说法?

+8

你为什么要这么做?它使代码很难阅读,这从来不是一件好事。 –

+0

计算数组中的字符串数量。 –

+0

它们都是'String []'吗? – NINCOMPOOP

回答

2

虽然你试图做的似乎是一个坏主意,但这是一段可以工作的代码。我不知道它是否完全符合你的要求,因为这并不完全清楚。

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

如果这样做,不过,你还是要检查是否bc是数组的索引范围之内。您也可以用&&来代替||,在这种情况下,您不必再这样做,但是如果阵列长度不等,您将会丢失一些项目。

+0

而不是我自己合并goodexpressions和badexpressions(新字符串[]和复制粘贴字符串在2提到的ararys),并使用该数组。我想使用apache库的数组组合器,但这会导入不必要的数据,我在android上编码,而且手机的资源有限。谢谢你的好回答。 –

+1

@joedacoolguy“导入不必要的数据” - 嗯? “手机资源有限” - 不是那么有限。我不会加载Spring,但实用程序库永远不会杀死任何人。赔率是你的图形资产将占用更多的空间。 – millimoose

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调用该方法一次。

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。但是,如果你这样做,你还需要小心避免数组边界异常。除非同时使用goodexpression[i]badexpression[i](例如比较它们,合并它们等等),否则如果使用两个单独的循环,代码将更具可读性和更高效。除非同时使用goodexpression[i]badexpression[i]

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

+0

你是对的第一。第二,目前还不清楚OP想要什么。我的假设是他想在那一刻停下来。但是,如果没有,我的代码可以适应。 –

+0

我删除了downvote,但任何阅读此答案的人都应该记住,如果数组长度不相同,则不会测试某些元素。 – NullUserException

+0

很明显,将'&&'变为'||'而将'min'变为'max'会导致在较小阵列上出现索引越界异常。底线是,以这种方式“组合”两个阵列不是一个好主意。 – NullUserException