Java 标记“”上的语法错误;“双”字;在if语句体中
当我尝试运行此代码时:Java 标记“”上的语法错误;“双”字;在if语句体中,java,Java,当我尝试运行此代码时: public static void main(String[] args) { double salary = 10.1; if (salary >= 100.3) double number = salary * 10; else double number = salary * 20; } 我得到以下错误: 令牌“double”上出现语法错误,请删除此令牌 以及: 无法将数字解析为变量 现在,代码
public static void main(String[] args) {
double salary = 10.1;
if (salary >= 100.3)
double number = salary * 10;
else
double number = salary * 20;
}
我得到以下错误:
令牌“double”上出现语法错误,请删除此令牌
以及:
无法将数字解析为变量
现在,代码是故意不好的,因为这是一个我们必须陈述所有错误的问题
据我所知,最好不要两次声明同一个变量,最好总是使用花括号;但是为什么
双倍数字=薪水*10代码>和双倍数字=工资*20代码>如果不使用花括号会导致问题吗?我本以为它仍然可以正确编译和运行(如果使用括号,它就可以正常工作)。因为它违反了Java语法。联合联络小组成员如下:
所以它需要一个语句
。大括号表示一个块
,以及一个。但是,变量声明是而不是语句
这是一种直观的行为——如果您可以在这里声明一个变量,它将是无用的,因为它将立即超出范围
一,。令人困惑的是,变量声明在JLS中被称为LocalVariableDeclarationStatement
s。但是,就语言语法而言,这不是一种语句。,因为它违反了Java语法。联合联络小组成员如下:
所以它需要一个语句
。大括号表示一个块
,以及一个。但是,变量声明是而不是语句
这是一种直观的行为——如果您可以在这里声明一个变量,它将是无用的,因为它将立即超出范围
一,。令人困惑的是,变量声明在JLS中被称为LocalVariableDeclarationStatement
s。但是,就语言语法而言,这不是一种语句。在没有大括号的if
语句中不允许声明。这是因为,如果在if
中只能有一条语句,则声明是无用的。范围立即结束。请阅读以下内容:您当然可以执行双倍数字=薪水>=100.3?工资*10:工资*20代码>或甚至双倍数字=工资*(工资>=100.3?10:20)代码>@bcsb1001它不会完全无用:int a=someFunctionWithSideEffect(a=veryExpensiveMethod(),a)代码>合法(否则)(可能令人惊讶);此处,a
可用作临时变量,以避免重新计算参数。但这并不是完全合理的代码,如果你真的想使用它,你可以用大括号把它括起来。只需指出,您可以在if中使用变量声明来达到某种模糊的实际目的。在没有大括号的if
语句中不允许使用声明。这是因为,如果在if
中只能有一条语句,则声明是无用的。范围立即结束。请阅读以下内容:您当然可以执行双倍数字=薪水>=100.3?工资*10:工资*20代码>或甚至双倍数字=工资*(工资>=100.3?10:20)代码>@bcsb1001它不会完全无用:int a=someFunctionWithSideEffect(a=veryExpensiveMethod(),a)代码>合法(否则)(可能令人惊讶);此处,a
可用作临时变量,以避免重新计算参数。但这并不是完全合理的代码,如果你真的想使用它,你可以用大括号把它括起来。只是指出你可以在if中使用变量声明来达到一些模糊的实际目的。它们在什么意义上不是一个语句?当然,它们不是语句
,但它们是块语句
@AndyTurner-也许格式化我的答案会有帮助?块语句
不是语句
,如果期望的是语句
,则。是的,我认为倒勾可以让它更清楚。我认为这里的“令人困惑的”是,规范称它为语句
,即使其他语句类型不包括在其中。它们在什么意义上不是语句?当然,它们不是语句
,但它们是块语句
@AndyTurner-也许格式化我的答案会有帮助?块语句
不是语句
,如果期望的是语句
,则。是的,我认为倒勾可以让它更清楚。我认为这里“令人困惑”的是,规范将其称为语句
,即使该语句中不包括其他语句类型。
IfThenStatement:
if ( Expression ) Statement