【问题标题】:Question about why the outer loop does not need braces in this case关于为什么在这种情况下外循环不需要大括号的问题
【发布时间】:2020-11-19 06:22:38
【问题描述】:

对于下面的代码,我不完全明白为什么外部 for 循环不需要大括号?我知道如果我们拥有它们会很好,但不完全明白为什么不拥有它们很好。如果循环的主体是一个语句,则不需要大括号。外部循环的主体如何只有一个语句,技术上不是 for 循环的范围,包括内部 for 循环。这是否意味着外部 for 循环在内部 for 循环完成之前不会结束,这意味着内部循环是外部 for 循环的一部分,对吗?在这种情况下,我们应该不能不使用我认为的大括号。我可能会对外部 for 循环体和嵌套 for 循环的组成部分感到困惑。

class HelloWorld{

     public static void main(String []args){
        for(int i = 0; i < 10; i ++)
            for(int j = 0;  j < 5; j++)
            {
                System.out.println("Hello"); 
            }
     }
}
 

【问题讨论】:

  • 这是个好问题。但值得记住的是,在任何情况下都不应该编写这样的代码。它使人们感到困惑,并迫使他们三思而后行。如果我在代码审查中看到这一点,我肯定会标记它。

标签: java braces


【解决方案1】:

forwhile 循环以及 if 子句都控制以下语句。

statement 可以是某行代码或block(用花括号括起来的代码)。 for statement 本身定义为

for ( [ForInit] ; [Expression] ; [ForUpdate] ) 声明

因此,以下语句可以是任何其他语句(包括新的 for 语句)。

你的代码大致等于

ForStatement (ForStatement Block)

第一个 for 查找以下语句,这是另一个 for。它循环它找到的语句。 内部 for 找到一个块作为下一条语句并循环该块。该块可以由多个语句本身组成。

另请参阅 (for loop without braces in java)。

【讨论】:

    【解决方案2】:

    因为内部循环只是一个语句。只有在外循环中有多个语句时,才必须使用大括号。因此,带有其主体的循环仅计为一个语句。

    【讨论】:

      【解决方案3】:

      你的外部循环只处理一个语句 - 内部for。因此,对于外部循环,其他所有内容都没有意义,而内部循环可能包含许多行,因为它只属于内部循环(在这种情况下用大括号标记),对于外部循环,只有下一行很重要并且它被忽略其他行。但是内循环没有,所以一切都很好,因为外循环确实启动了内循环,而内循环则完成了其余的循环。

      但是:在这种情况下,为外循环使用大括号更具可读性。

      【讨论】:

        猜你喜欢
        • 2016-07-17
        • 1970-01-01
        • 2016-08-08
        • 2012-12-14
        • 1970-01-01
        • 2017-07-15
        • 2022-01-23
        • 1970-01-01
        • 2013-01-25
        相关资源
        最近更新 更多