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