基本上是标题。 通过Java BNF,我看到"没有简短的"例如:
<statement no short if> ::= <statement without trailing substatement> | <labeled statement no short if> | <if then else statement no short if> | <while statement no short if> | <for statement no short if>
它是什么&#34;没有短暂的&#34;意思?我看到&#34; NoShortIf&#34;在我的演讲幻灯片中弹出,没有解释它的含义。
答案 0 :(得分:2)
“短if”是一个if语句,没有else。
在某些情况下,不允许使用“简短的假设”来消除歧义。
以下是有效的Java。没有“简短的假设”,也没有歧义。
boolean flag = false;
if (x > 0)
if (x > 10)
flag = true;
else
flag = false;
else
flag = true;
以下也是有效的Java代码,但是如果没有“ short if”规则,那么else是否属于哪个是不确定的。
if (x > 0) if (x < 10) flag = true; else flag = false;
以下Java语言规则
IfThenStatement:
if ( Expression ) Statement
IfThenElseStatement:
if ( Expression ) StatementNoShortIf else Statement
暗示上面代码的含义是
if (x > 0)
if (x < 10)
flag = true;
else
flag = false;
也就是说,else属于内部if语句。
确定要使用Java进行测试
static Boolean shorty (int x) {
Boolean flag = null;
if (x > 0) if (x < 10) flag = true; else flag = false;
return flag;
}
public static void main(String[] args) {
System.out.println(shorty(-1));
System.out.println(shorty(5));
System.out.println(shorty(20));
}
输出为
null
true
false
答案 1 :(得分:1)
答案在上面@Andy Turner的评论中提供的链接中:
因此,语句在语法上分为两类:那些 可能以没有else子句的if语句结束(&#34;短if) 声明&#34;)和那些绝对没有的声明。
只有明确不以short if语句结尾的语句才可以 在if中的关键字else之前显示为直接子语句 有一个else子句的语句。
这个简单的规则可以防止&#34;悬空其他&#34;问题。执行 &#34;没有短的语句的行为&#34;限制是 与同类语句的执行行为相同 没有&#34;没有短暂的&#34;限制;纯粹是区分 解决句法难度。