你可以在Java之后立即放置吗?

时间:2013-11-08 08:28:22

标签: java

Eclipse允许我编写一些这样的代码,并且不会显示任何错误:

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

这会表现得如预期,还是这不是有效的Java?

8 个答案:

答案 0 :(得分:8)

这是有效的。 if会重复listOfSomeClass的重复次数。但这并不意味着像这样编写Java是一个好主意。请不要这样做。

你甚至可以写点像

for (SomeClass c : listOfSomeClass) if (c.someBoolean) System.out.println(c);

如果你感觉特别不正常。

但是,在编写代码时,编写其他程序员可以在必要时轻松阅读,理解和修改的代码非常重要。一旦软件系统投入生产,您就可以相当确定将来某个时候需要对其进行更改。你无法确定的是这些变化究竟是什么。

一个优秀的程序员,一个专业的程序员,以尽可能简单的方式编写他/她的代码;这意味着尽可能容易理解。现在,我们专业程序员习惯于以某种方式查看代码。与forif一起使用的大括号,无论它们是否实际需要。一致的缩进。直观使用变量名,等等。任何不寻常的事情都会让我们失望。

我不想摸不着头脑,想弄清楚代码是如何工作的。我不想知道哪些行是for循环或if分支的一部分。我希望代码能够告诉我它的作用,这是我第一次看到它。所以,如果你和我在同一个团队中 - 或者和任何模仿我的程序员在同一个团队 - 然后为了对这个世界上所有好事的热爱,那就写下这个循环。

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

答案 1 :(得分:5)

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

这样的东西
for (SomeClass c : listOfSomeClass) 
    if (c.someBoolean) {
        // actions to take if someBoolean is true
    }

答案 2 :(得分:2)

是的,可以做到,if循环

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<10;i++)
{
    System.out.println("welcome");
}

所以它会打印欢迎10次。

但是这个例子

˚F

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

将打印欢迎10次,外面一次。 上面的代码类似于

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

答案 3 :(得分:2)

这是有效的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);

请注意,通常不鼓励这种风格,因为它可能会导致对代码的误解。

答案 4 :(得分:2)

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

for (...) 声明

通常,语句将采用{形式的指令集,每个指令由; }分隔,但当然,可以省略大括号一个声明。

由于if ( ... ){ } 是一个声明,您的代码有效

但是它虽然模糊不清:至少遵守既定惯例,并在下一行开始if并增加额外的缩进。在编写for循环时,总是使用大括号,但这是个人选择,而且很多受人尊敬的编码员都没有。

答案 5 :(得分:0)

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

示例:

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

将打印:

0
1
2
Hello

0
Hello
1
Hello
2
Hello

如果您有以下代码,则会打印第二个输出:

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

但是,建议使用块语句。

答案 6 :(得分:0)

如果你想在循环中执行多行,那么你就像这样写

for (SomeClass c : listOfSomeClass)  
{
    //multiple lines to be executed
    System.out.println("print this awesome line");
}

现在如果你只想要一个sinle代码行来执行循环,那么你就像这样编写

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

答案 7 :(得分:0)

如果你看一下for的Java语言规范,你会看到(对于enhanced for):

for ( FormalParameter : Expression ) Statement

Statement的定义是:

Statement:
    StatementWithoutTrailingSubstatement
    ...
    IfThenStatement
    ...

StatementWithoutTrailingSubstatement:
    Block
    ...

(我遗漏了一些定义)

换句话说,您问题中的陈述相当于for ( FormalParameter : Expression ) Statement StatementIfThenStatement

现在一般情况下建议使用Block代替,或者至少缩进以获得更好的可读性。您的陈述相当于:

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
    }
}