我写了这个:
(fitness>g.fitness) ? return 1 : return -1;
并收到以下错误:
令牌上的语法错误,应改为标签。
谁能解释在这种情况下令牌和标签是什么?
编辑:感谢您修复我的代码,但是您能否解释一下令牌和标签是什么,以供将来参考?
我写了这个:
(fitness>g.fitness) ? return 1 : return -1;
并收到以下错误:
令牌上的语法错误,应改为标签。
谁能解释在这种情况下令牌和标签是什么?
编辑:感谢您修复我的代码,但是您能否解释一下令牌和标签是什么,以供将来参考?
标记是具有某种含义的单个字符和字符串。
第 3 章: Java 语言规范的词法结构中定义的标记是:
语法语法的标识符(§3.8)、关键字(§3.9)、文字(§3.10)、分隔符(§3.11)和运算符(§3.12)。
给定行中的标记是:
"(", "fitness", ">", "g.fitness", ")", "?", "return", "1", ":", "return", "-1", ";"
(空格也很重要,但我在上面省略了它们。)
Java中的标签用于控制程序中的流程,是一个标识符,后跟一个冒号。
标签的一个例子是hello:
.
continue
标签与和语句一起使用break
,以指定要continue
或break
要使用的控制结构。
The Java Language Specification的第 14.7 节中提供了有关标记语句的更多信息。
这里的问题在于return
声明:
(fitness>g.fitness) ? return 1 : return -1;
^^^^^^
:
紧随其后的是,return 1
这使编译器认为那里应该有一个标签。
然而,return 1
is 本身就是一个语句,因此那里没有标签标识符,所以编译器抱怨它期待一个标签,但它无法找到一个格式正确的标签。
(fitness>g.fitness) ? return 1 : return -1;
^^^^^^^^ ^
statement label without an identifier
Return 是一个语句, ?: 需要表达式,因此不被接受。
return (fitness > g.fitness) ? 1 : -1;
可能是你想要的。
解析代码时先拆分,以便于理解,这些单元称为token。我猜标签是指一种语言结构,它恰好是语句中第一个可能的语言结构。
要了解解析器如何决定给出该错误消息,需要深入研究解析器。从解析器提供好的错误消息并非易事。
你需要做:
return (fitness>g.fitness) ? 1 : -1;
我认为编译器告诉你,由于你的代码中有一个冒号,它认为你正在尝试声明一个标签语句,但它无法解析它,因为你的语法不正确。