我应该编写一个程序,它接受一个数字并检查它是否可以容纳在某种数据类型中。这是一个片段:try { long x=sc.nextLong(); System.out.println(x+" can be fitted in:"); if(x>=-128 && x<=127) { System.out.println("* byte"); } else if(x>=-32768 && x<=32768) { System.out.println("*short"); } else if(x>= −2147483648l && x<= +2147483647L) { System.out.println("*int"); } else if(x>=-9223372036854775808l && x<= +9223372036854775807l) { System.out.println("*long"); }} catch(Exception e) { System.out.println(sc.next()+" can't be fitted anywhere.");}当我编译这段代码时,一个奇怪的错误出现了。Solution.java:30: error: illegal character: \8722else if(x>= −2147483648l && x<= +2147483647L)^Solution.java:30: error: not a statementelse if(x>= −2147483648l && x<= +2147483647L)^Solution.java:30: error: ';' expectedelse if(x>= −2147483648l && x<= +2147483647L)^Solution.java:34: error: 'else' without 'if' else if(x>=-9223372036854775808l && x<= +9223372036854775807l)
2 回答
郎朗坤
TA贡献1921条经验 获得超9个赞
用于 -2147483648l 的“-”字符不是有效字符,请将其与其他负数 -32768 或 -9223372036854775808l 进行比较。这就是编译错误。
慕莱坞森
TA贡献1810条经验 获得超4个赞
复制您的代码后,我重复了该错误。看起来好像没有什么问题;该字符看起来像普通的连字符,但事实并非如此。它是一个Unicode“减号”,具有讽刺意味的是,它不被识别为一元减号运算符。
else if(x>= −2147483648l && x<= +2147483647L)
^
您可以直观地看到差异:
System.out.println((int) '−'); // Unicode minus sign, U+2212, error in code
System.out.println((int) '-'); // Ordinary hyphen, works in code
输出:
8722 // Decimal of 0x2212
45
您可能从另一个文档复制了这个 Unicode 减号。将其替换为普通的连字符即可。
添加回答
举报
0/150
提交
取消