为啥外部for循环变量不能用于内部for循环

Posted

技术标签:

【中文标题】为啥外部for循环变量不能用于内部for循环【英文标题】:why outer for loop variable can't be used in inner for loop为什么外部for循环变量不能用于内部for循环 【发布时间】:2016-08-31 00:09:04 【问题描述】:

我正在编写以下代码:

int j =0;
for( j=0; j< 10;j++)
  System.out.println("Printing outer for loop :" +j);
  for(j; j < 8; j++)
  
     System.out.println("Printing inner for loop" + j);
  

Eclipse 显示以下错误:

Syntax error on token "j", ++ expected after this token

我不明白背后的原因。任何解释将不胜感激。谢谢

【问题讨论】:

您希望j; 做什么?如果不想给j赋初值,就写for(; j &lt; 8; j++) 原因是,for 循环语法无效,for(j; j &lt; 8; j++) 不是有效的 for 循环。 我明白了。感谢您的反对票;) 【参考方案1】:

for 循环的第一个参数是初始化语句 - https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html

for (initialisation; termination;
     increment) 
    statement(s)

for(j;j

请初始化上述for循环中的第一条语句。

【讨论】:

【参考方案2】:

循环不像函数那样孤立。

【讨论】:

【参考方案3】:

j; 不是有效语句,这就是您的内部循环无法编译的原因。你不需要在里面写一个语句,你可以在内部循环中将“第一部分”留空:

int j =0;
for( j=0; j< 10;j++)
    System.out.println("Printing outer for loop :" +j);
    for(; j < 8; j++)
    
        System.out.println("Printing inner for loop" + j);
    

【讨论】:

【参考方案4】:

根据JLS 中的定义,for 循环声明的第一个“部分”ForInit 是list of statement expressions or a local variable declaration; j 不是语句表达式(赋值;前/后递增/递减;方法调用;新类初始化)或局部变量声明,因此它是无效语法。

根据您要执行的操作,您可以省略它:

for (; j < 8; j++)

请注意,for 循环的所有三个“部分”都是可选的:例如,这很好:

for (;;) 

(这只是一个无限循环)

【讨论】:

以上是关于为啥外部for循环变量不能用于内部for循环的主要内容,如果未能解决你的问题,请参考以下文章

增强for循环

如何在Django模板的内部for循环中使用外部for循环值

为啥这个for循环不执行?

Go 循环

为啥for循环最少避免使用浮点型变量作为循环变量

Shell的双重循环