3

我写了这个:

(fitness>g.fitness) ? return 1 : return -1;

并收到以下错误:

令牌上的语法错误,应改为标签。

谁能解释在这种情况下令牌和标签是什么?

编辑:感谢您修复我的代码,但是您能否解释一下令牌和标签是什么,以供将来参考?

4

4 回答 4

6

标记是具有某种含义的单个字符和字符串。

第 3 章: Java 语言规范的词法结构中定义的标记是:

语法语法的标识符(§3.8)、关键字(§3.9)、文字(§3.10)、分隔符(§3.11)和运算符(§3.12)。

给定行中的标记是:

"(", "fitness", ">", "g.fitness", ")", "?", "return", "1", ":", "return", "-1", ";"

(空格也很重要,但我在上面省略了它们。)


Java中的标签用于控制程序中的流程,是一个标识符,后跟一个冒号。

标签的一个例子是hello:.

continue标签与和语句一起使用break,以指定要continuebreak要使用的控制结构。

The Java Language Specification的第 14.7 节中提供了有关标记语句的更多信息。


这里的问题在于return声明:

(fitness>g.fitness) ? return 1 : return -1;
                      ^^^^^^

:紧随其后的是,return 1这使编译器认为那里应该有一个标签。

然而,return 1is 本身就是一个语句,因此那里没有标签标识符,所以编译器抱怨它期待一个标签,但它无法找到一个格式正确的标签。

(fitness>g.fitness) ?  return 1   :   return -1;
                       ^^^^^^^^   ^
                      statement   label without an identifier
于 2010-01-01T08:13:32.670 回答
5

Return 是一个语句, ?: 需要表达式,因此不被接受。

return (fitness > g.fitness) ? 1 : -1;

可能是你想要的。

解析代码时先拆分,以便于理解,这些单元称为token。我猜标签是指一种语言结构,它恰好是语句中第一个可能的语言结构。

要了解解析器如何决定给出该错误消息,需要深入研究解析器。从解析器提供好的错误消息并非易事。

于 2010-01-01T07:48:24.343 回答
1

你需要做:

return (fitness>g.fitness) ? 1 : -1;
于 2010-01-01T07:47:40.897 回答
0

我认为编译器告诉你,由于你的代码中有一个冒号,它认为你正在尝试声明一个标签语句,但它无法解析它,因为你的语法不正确。

于 2010-01-01T08:11:06.763 回答