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

Java 在for()循环中声明2个变量,java,Java,我有两个这样的循环 好表达式和坏表达式是字符串数组 for(int i =0; i < goodexpressions.length; i++) {} for(inti=0;i

我有两个这样的循环

好表达式和坏表达式是字符串数组

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

for(int j=0;j
我试图在一个循环中声明这两个,到目前为止我已经得到了,但它是不正确的

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

我该怎么做才能纠正这句话呢?

尽管您试图做的似乎是个坏主意,但下面有一段代码可以工作。我不知道它是否完全符合你的要求,因为我还不完全清楚

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

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

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

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

for (int i = 0; i < combinedAandB.length; i++) {
    ...
}
更新:关于您问题中的双变量循环方法和其他两个答案:请注意,由于这两个变量在循环的每次迭代中都具有完全相同的值,您也可以只使用一个变量:

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

但也要注意,这在避免代码重复方面对您没有任何好处,因为您仍然必须同时执行以下两项操作:
goodexpressions[i]
badexpressions[i]
。更好的方法可能是编写一个保持循环的方法,用
goodexpressions
调用该方法一次,用
badexpressions
调用该方法一次

我想这会满足你的要求:

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

注:

  • 现在还不清楚循环体将要做什么。这将决定组合循环的正确方式。。。或者如果把它们结合起来是个坏主意

  • 上述代码设计为在两个长度中的较小长度处停止。如果要在较大的位置停止,请将
    &&
    更改为
    |
    并将
    min
    更改为
    max
    。但是,如果这样做,还需要注意避免数组边界异常

  • 除非目的是同时使用
    goodexpression[i]
    badexpression[i]
    (例如,比较它们,组合它们,等等),否则如果使用两个单独的循环,代码将更具可读性和效率

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


  • 你为什么要这样做?这会使代码难以读取,这从来都不是一件好事。先计算数组中的字符串数,然后计算第一个数组中的字符串数,再计算第二个数组中的字符串数,然后添加结果。为了避免代码重复,将循环和计数代码放在一个单独的方法中,并调用此方法两次:
    int sum=countStringsIn(badexpressions)+countStringsIn(goodexpressions)
    为什么不直接使用
    goodexpressions.length
    +
    badexpressions.length
    呢?因此您希望找到两个数组的组合长度,但确保没有重复的数组?只需执行
    Arrays.asList(goodexpressions)
    Arrays.asList(badexpressions)
    ,然后创建一个新的
    HashSet
    ,并使用
    addAll
    方法添加
    Arrays.asList(goodexpressions)
    Arrays.asList(badexpressions)
    。最后,只需在HashList上调用
    .size()
    。(
    .asList()
    返回一个转换为
    列表的数组,您需要在
    哈希集
    上使用
    addAll
    方法。哈希集
    不允许重复条目。)您的意图不清楚,因此,我可能没有很好地回答您的问题。相反,我只是自己将goodexpressions和badexpressions组合在一起(新字符串[],并将字符串复制粘贴到提到的2个araray中),并使用了该数组。我想使用apache库的数组合并器,但这会导入不必要的数据,我正在android上编码,而且手机的资源仍然有限。谢谢你的回答。@joedacoolgay“导入不必要的数据”-嗯?“移动电话的资源有限”——不是那么有限。我不会在其中加载Spring,但实用程序库从未杀死任何人。你的图形资产很可能会占用更多的空间。第一点你是对的。第二,不清楚OP想要什么。我的假设是他想在这一点上停下来。但如果不是这样,我的代码就可以简单地修改了。我取消了否决票,但是任何阅读此答案的人都应该记住,如果数组长度不相同,某些元素将不会被测试。显然,将
    &&
    更改为
    |
    min
    更改为
    max
    可能会导致较小数组上的索引越界异常。底线是,以这种方式“组合”两个数组不是一个好主意。
    for (int i = 0; i < goodexpressions.length || i < badexpressions.length; i++) { }
    
    for (int b = 0, c = 0; 
         b < goodexpressions.length && c < badexpressions.length; 
         b++, c++)
    
    for (int i = 0; i < Math.min(goodexpressions.length, badexpressions.length); i++)