我正在编写一个简单的程序,它接收来自Scanner对象的整数输入,确定它是否是回文,并返回布尔值。
对于大多数数字,它运作良好。但是,在此代码段中:
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位整数)但我不确定。或者递归有什么问题吗?
答案 0 :(得分:3)
因为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。
答案 1 :(得分:0)
如果您有大约" nextLong()
"您可以使用long
整数阅读如下:
private static void programRunner() {
System.out.print("Insert your number:");
Scanner in = new Scanner(System.in);
if (in.hasNextLong())
{
long testNumber = in.nextLong();
boolean result = palindromeTester(testNumber);
System.out.println(result);
programRunner();
}
else
{
System.exit(0);
}
}
答案 2 :(得分:0)
您似乎已超出int
类型的范围限制。 long
类似乎是您正在寻找的类型。
因此,您可以使用hasNextLong()
类的nextLong()
和Scanner
方法,也可以使用@Hovercraft Full Of Eels在评论中建议,因为您不使用数据采用数值方式,最好以String
的形式接收数据。
最后,但并非最不重要的是,我发现在这里使用递归效率很低,因为每次递归调用都会创建一个新的堆栈帧,以及每次递归调用时,您正在新建Scanner
实例。最好使用while
循环。