因此,对于我的Java类简介,我想用ASCII创建一个姜饼人。这是第一个作业,因此该类目前仅涵盖了println的规定。我在OSX 64位上使用Eclipse IDE for Java Developers。
这就是我现在所拥有的:
import acm.program.*;
public class ASCIIArtProgram extends ConsoleProgram {
public void run() {
println(" _ ");
println(" _(")_ ");
println("(_ . _)");
println(" / : \ ");
println("(_/ \_)");
}
}
某些原因我在第7行遇到错误。它不断将分号改为冒号。
错误:
令牌“_”上的语法错误,AssignmentOperator
双引号
该程序假设输出:
_
_(")_
(_ . _)
/ : \
(_/ \_)
我很困惑我做错了什么。
答案 0 :(得分:5)
你在哪里
println(" _(")_ ");
^
字符串中的引号正在终止字符串。这就是引用字符串的工作原理。 如果要在字符串中打印引用,则需要
println(" _(\")_ ");
您还会发现需要将打印的\
替换为\\
,因为\
本身具有&#34的特殊含义;转义下一个字符& #34;
即
public void run() {
println(" _ ");
println(" _(\")_ ");
println("(_ . _)");
println(" / : \\ ");
println("(_/ \\_)");
}
答案 1 :(得分:2)
您必须转义要打印的特殊字符,因为编译器不知道您的"
是print "
还是start/stop a String
。同样适用于\
。
要逃避角色,只需在其前面写\
即可。所以:
"
变为\"
\
变为\\
您可以在Oracle的Java Tutorials中阅读有关字符和转义的更多信息。
答案 2 :(得分:1)
仔细看看......
println(" _(")_ ");
^---^---^
你打开,关闭并打开引号," _("
是一个正确的String
文字,)_ "
就编译器而言是垃圾,因为它不是任何有效的Java命令可以解释。
你需要逃避第二个引用,例如......
println(" _(\")_ ");
这将使Java忽略它并将其视为(字面上)作为String
内容的一部分......
\
也有特殊意义,正如你所见,你也需要逃脱它......
println(" / : \\ ");
println("(_/ \\_)");
答案 3 :(得分:0)