我正在编写一个简单的程序,它从 Scanner 对象接收整数输入,确定它是否是回文,并返回 boolean 值。
对于大多数数字,它运行良好。但是,在这段代码中:
private static void programRunner() {
System.out.print("Insert your number:");
Scanner in = new Scanner(System.in);
if (in.hasNextInt()) {
int testNumber = in.nextInt();
boolean result = palindromeTester(testNumber);
System.out.println(result);
programRunner();
} else {
System.exit(0);
}
}
我添加了“System.exit(0)”表达式,使用户可以通过故意键入任何非整数值轻松终止程序。问题在于,当提供“相当大”的整数(例如“1234567654321”)时,代码会启动 System.exit(0),这意味着它不会被识别为整数?
我认为问题在于 hasNextInt 方法的“默认半径”,它可能限制了它识别的整数值的大小。 (该程序最多可运行 9 位整数)但我不确定。还是递归有问题?
最佳答案
因为 Java 中的 int
是 32 位 并且只能将 2^31 - 1
(2147483647) 作为最大值(另请参阅Integer.MAX_VALUE)。
任何比它更大的都不是int
,而是long
(除非它比Long.MAX_VALUE
还要大,在这种情况下你需要获取 BigInteger
的值。)
参见 Integer.MAX_VALUE , Long.MAX_VALUE , Scanner.nextInteger() , Scanner.nextLong() , Scanner.nextBigInteger()和 BigInteger .
关于java - 为什么 hasNextInt() 方法不适用于大整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49349409/