Eclipse允许我编写一些这样的代码,并且不会显示任何错误:
for (SomeClass c : listOfSomeClass) if (c.someBoolean) {
// actions to take if someBoolean is true
}
这会表现得如预期,还是这不是有效的Java?
答案 0 :(得分:8)
这是有效的。 if
会重复listOfSomeClass
的重复次数。但这并不意味着像这样编写Java是一个好主意。请不要这样做。
你甚至可以写点像
for (SomeClass c : listOfSomeClass) if (c.someBoolean) System.out.println(c);
如果你感觉特别不正常。
但是,在编写代码时,编写其他程序员可以在必要时轻松阅读,理解和修改的代码非常重要。一旦软件系统投入生产,您就可以相当确定将来某个时候需要对其进行更改。你无法确定的是这些变化究竟是什么。
一个优秀的程序员,一个专业的程序员,以尽可能简单的方式编写他/她的代码;这意味着尽可能容易理解。现在,我们专业程序员习惯于以某种方式查看代码。与for
和if
一起使用的大括号,无论它们是否实际需要。一致的缩进。直观使用变量名,等等。任何不寻常的事情都会让我们失望。
我不想摸不着头脑,想弄清楚代码是如何工作的。我不想知道哪些行是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
Statement
:IfThenStatement
。
现在一般情况下建议使用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
}
}