如何在java中使用变量中的大数进行算术而不出现异常

我应该编写一个程序,它接受一个数字并检查它是否可以容纳在某种数据类型中。这是一个片段:


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: \8722

else if(x>= −2147483648l && x<= +2147483647L)

^

Solution.java:30: error: not a statement

else if(x>= −2147483648l && x<= +2147483647L)

^

Solution.java:30: error: ';' expected

else if(x>= −2147483648l && x<= +2147483647L)

^

Solution.java:34: error: 'else' without 'if'

   else if(x>=-9223372036854775808l && x<= +9223372036854775807l)


慕的地10843
浏览 152回答 2
2回答

郎朗坤

用于 -2147483648l 的“-”字符不是有效字符,请将其与其他负数 -32768 或 -9223372036854775808l 进行比较。这就是编译错误。

慕莱坞森

复制您的代码后,我重复了该错误。看起来好像没有什么问题;该字符看起来像普通的连字符,但事实并非如此。它是一个Unicode“减号”,具有讽刺意味的是,它不被识别为一元减号运算符。else if(x>= −2147483648l && x<= +2147483647L)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ^您可以直观地看到差异:System.out.println((int) '−');&nbsp; &nbsp; // Unicode minus sign, U+2212, error in codeSystem.out.println((int) '-');&nbsp; &nbsp; // Ordinary hyphen, works in code输出:8722&nbsp; &nbsp; &nbsp; &nbsp; // Decimal of 0x221245&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;您可能从另一个文档复制了这个 Unicode 减号。将其替换为普通的连字符即可。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java