Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,能否在for之后立即放置if?_Java - Fatal编程技术网

在Java中,能否在for之后立即放置if?

在Java中,能否在for之后立即放置if?,java,Java,Eclipse允许我编写如下代码,并且不会显示任何错误: for (SomeClass c : listOfSomeClass) if (c.someBoolean) { // actions to take if someBoolean is true } 这会像预期的那样运行吗?还是这不是有效的Java?它是有效的。if的重复次数与某个类的列表的元素重复次数相同。但这并不意味着像这样编写Java是个好主意。请不要这样做 你甚至可以写这样的东西 for (SomeClass c :

Eclipse允许我编写如下代码,并且不会显示任何错误:

for (SomeClass c : listOfSomeClass) if (c.someBoolean) {
    // actions to take if someBoolean is true
}

这会像预期的那样运行吗?还是这不是有效的Java?

它是有效的。
if
的重复次数与某个类的
列表的元素重复次数相同。但这并不意味着像这样编写Java是个好主意。请不要这样做

你甚至可以写这样的东西

for (SomeClass c : listOfSomeClass) if (c.someBoolean) System.out.println(c);
for (SomeClass c : listOfSomeClass) 
    if (c.someBoolean) {
        // actions to take if someBoolean is true
    }
如果你感觉特别反常

然而,在编写代码时,编写其他程序员可以轻松阅读、理解和修改(如果需要)的代码非常重要。一旦一个软件系统投入生产,您可以相当肯定,在将来的某个时候,它将需要进行更改。你不能确定的是这些变化到底会是什么

所以一个好的程序员,一个专业的程序员,写代码的方式要尽可能容易修改;这意味着尽可能容易理解。现在,我们专业程序员已经习惯于看到代码以某种方式排列。与
for
if
一起使用的花括号,无论是否实际需要。一致的压痕。直观地使用变量名,等等。任何稍微不寻常的事情都会让我们慢下来

我不想挠头,试图弄明白代码是如何工作的。我不想考虑哪些行是
for
循环的一部分,或者
if
分支的一部分。我想要一段代码,当我第一次看到它时,它会告诉我它的功能。所以,如果你曾经和我在同一个团队中,或者和任何一个模模糊糊地像我的程序员在同一个团队中,那么出于对这个世界上一切美好事物的热爱,请像这样编写这个循环

for (SomeClass element : listOfSomeClass) {
    if (element.shouldBePrinted()) {
        System.out.println(element);
    }
}

它工作正常,但格式可能会让人困惑。即使你也不确定它会做什么。我建议您在eclipse中使用标准格式化程序来生成以下内容

for (SomeClass c : listOfSomeClass) if (c.someBoolean) System.out.println(c);
for (SomeClass c : listOfSomeClass) 
    if (c.someBoolean) {
        // actions to take if someBoolean is true
    }

是的,它可以完成,如果循环

if (c.someBoolean) {
    // actions to take if someBoolean is true
}
将执行多次

将执行for循环之后立即出现的内容。 比如说

for(int i=0;i<10;i++)
System.out.println("welcome");

for(int i=0;i这是有效的Java代码,与以下代码相同:

for (SomeClass c : listOfSomeClass) {
    if (c.someBoolean) {
        // actions to take if someBoolean is true
    } 
}
实际上,Java允许您在for循环条件之后编写一行语句。示例:

for (int i = 0; i < 10; i++)
    System.out.println(i);
for(int i=0;i<10;i++)
系统输出打印LN(i);

请注意,通常不鼓励使用这种样式,因为它会导致对代码功能的误解。

非正式地说,for
结构有以下语法:

(…)的
语句

通常,语句的形式为
{
指令集,每个指令集之间用;
}
分隔,但当然,也可以省略单个语句的大括号

由于
如果(
){}
是一条语句,您的代码是有效的


但这并不清楚:至少要遵守一个既定的惯例,在下一行的
if
中添加一个额外的缩进级别。我在为
循环编写
时总是使用大括号,但这是个人的选择,很多受人尊敬的程序员都不这样做。

这是有效的。如果你不使用大括号“{”,则只执行第一个命令。例如,如果在“if”块之后有另一个命令,则它不会成为“For”循环的一部分

例如:

for (int i=0; i<3; i++)
    System.out.println(i);
System.out.println("Hello");
而不是

0
Hello
1
Hello
2
Hello
如果您具有以下代码,则将打印第二个输出:

for (int i=0; i<3; i++) {
    System.out.println(i);
    System.out.println("Hello");
}

for(inti=0;i如果希望在循环中执行多行,那么可以这样编写

for (SomeClass c : listOfSomeClass)  
{
    //multiple lines to be executed
    System.out.println("print this awesome line");
}
for (SomeClass c : listOfSomeClass)  
    System.out.println("print this awesome line");
现在,如果您只想根据循环执行一个sinle代码行,那么您可以这样编写它

for (SomeClass c : listOfSomeClass)  
{
    //multiple lines to be executed
    System.out.println("print this awesome line");
}
for (SomeClass c : listOfSomeClass)  
    System.out.println("print this awesome line");
现在这一行可以是任何有效的代码行 因此,如果条件也是允许的

if(awesomeCondition)
{
    System.out.println("print this awesome line in side legendary if condition");
}
因此,您的最终代码是

for (SomeClass c : listOfSomeClass)  
if(awesomeCondition)
{
    System.out.println("print this awesome line in side legendary if condition");
}
这与

for (SomeClass c : listOfSomeClass)  
{
    if(awesomeCondition)
    {
        System.out.println("print this awesome line in side legendary if condition");
    }// end of IF block
}// end of for loop

如果您查看的Java语言规范,您将看到(针对以下内容):

其定义是:

(我省略了一些定义)

换句话说,您问题中的语句相当于(FormalParameter:Expression)语句的
,其中
语句
IfThenStatement

现在,通常建议使用
,或者至少使用缩进以提高可读性。您的语句相当于:

for (SomeClass c : listOfSomeClass) 
    if (c.someBoolean) {
        // actions to take if someBoolean is true
    }
或者更好:

for (SomeClass c : listOfSomeClass) {
    if (c.someBoolean) {
        // actions to take if someBoolean is true
    }
}

这是有效的声明大多数情况下,CheckStyle、PMD或任何与Sonar兼容的工具都会建议您始终使用{}。由于最重要的是清晰和简单,请毫不犹豫地遵循此建议。^^谢谢,但您介意解释原因吗?我仍在学习Java。链接到解释原因的参考资料也可以。您的意思是为什么它有效?或者为什么不应该这样做?@John您不应该这样做,因为这会使您的代码难以阅读。无法阅读code=废话,不管它是否真的是一个很好的代码。@John请查看我的答案,并告诉我您的问题是否得到解决
for (SomeClass c : listOfSomeClass) 
    if (c.someBoolean) {
        // actions to take if someBoolean is true
    }
for (SomeClass c : listOfSomeClass) {
    if (c.someBoolean) {
        // actions to take if someBoolean is true
    }
}