我写了这个:
(fitness>g.fitness) ? return 1 : return -1;
并收到以下错误:
令牌上的语法错误,而不是标签。
任何人都可以解释在这种情况下令牌和标签是什么吗?
编辑:感谢您修复我的代码,但是您能解释一下代币和标签是什么,以备将来参考吗?
答案 0 :(得分:6)
标记是具有某种含义的单个字符和字符串。
Chapter 3: Lexical Structure的The Java Language Specification中定义的标记为:
标识符(§3.8),关键字(§3.9), 文字(§3.10),分隔符(§3.11), 和句法的运算符(§3.12) 语法。
给定行中的标记是:
"(", "fitness", ">", "g.fitness", ")", "?", "return", "1", ":", "return", "-1", ";"
(空白也很重要,但我从上面省略了它们。)
Java中的标签用于控制程序中的流,它是一个标识符,后跟一个冒号。
标签的示例是hello:
。
标签与continue
和break
语句结合使用,以指定continue
或break
到哪个控制结构。
Section 14.7 The Java Language Specification中有关于标记语句的更多信息。
这里的问题是return
声明:
(fitness>g.fitness) ? return 1 : return -1;
^^^^^^
紧跟:
之后有一个return 1
,这使得编译器认为那里应该有一个标签。
但是,return 1
本身就是一个语句,因此,那里没有标签标识符,所以编译器抱怨它期待一个标签,但它无法找到一个正确形成的标签。
(fitness>g.fitness) ? return 1 : return -1;
^^^^^^^^ ^
statement label without an identifier
答案 1 :(得分:5)
返回是一个语句,而?:需要表达式,因此不被接受。
return (fitness > g.fitness) ? 1 : -1;
可能就是你想要的。
首先拆分解析代码以便更容易理解,这些单位称为令牌。我猜标签是指一种恰好是语句中第一个可能的语言结构。
要了解解析器如何决定提供该错误消息,需要深入了解解析器。从解析器中提供良好的错误消息并非易事。
答案 2 :(得分:1)
你需要这样做:
return (fitness>g.fitness) ? 1 : -1;
答案 3 :(得分:0)
我认为编译器告诉你,因为代码中有一个冒号,它认为你试图声明一个label statement,但它无法解析它,因为你的语法不正确。