Java 为什么';t hasNextInt()方法是否适用于大整数?
我正在编写一个简单的程序,它接收来自Scanner对象的整数输入,确定它是否是回文,并返回布尔值 对于大多数数字来说,它运行良好。但是,在此代码段中:Java 为什么';t hasNextInt()方法是否适用于大整数?,java,java.util.scanner,Java,Java.util.scanner,我正在编写一个简单的程序,它接收来自Scanner对象的整数输入,确定它是否是回文,并返回布尔值 对于大多数数字来说,它运行良好。但是,在此代码段中: private static void programRunner() { System.out.print("Insert your number:"); Scanner in = new Scanner(System.in); if (in.hasNextInt()) { int testNumber
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),这意味着它不会被识别为整数
我认为问题在于hasnetint方法的“默认半径”,这可能会限制它识别的整数值的大小。(程序可以运行到9位整数)但我不确定。或者递归有什么问题吗?因为Java中的
int
是32位的,并且只能将2^31-1
(2147483647)作为最大值(另请参见)
大于该值的任何值都不是int
,而是long
(除非它甚至大于long.MAX\u值,在这种情况下,您需要将值获取为biginger
)
看,,
,
和。如果您有大的“long
”整数,可以使用nextLong()
,如下所示:
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);
}
}
您似乎已超出int
类型的范围限制。long
类型似乎就是您要查找的类型
因此,您可以使用Scanner
类的hasNextLong()
和nextLong()
方法,也可以使用注释中所建议的@Hovercraft-Full-Eels方法,因为您没有以数字方式使用数据,因此最好以字符串的形式接收数据
最后,但并非最不重要的一点是,我发现在这里使用递归效率很低,因为每次递归调用都会创建一个新的堆栈框架,同时为每次递归调用创建一个Scanner
实例。最好使用while
循环 1)这不是整数,而是看起来在长整数的范围内。2) 当你不以数字方式使用数据时,为什么还要得到整数呢?改为以字符串形式获取数据。使用hasNextLong()
和nextLong()
,因为您已经超出了int
类型的范围限制。也就是说,像这样使用递归效率很低,可以使用while
循环。顺便说一句,基数与int
的大小无关,但是告诉扫描器字母数字整数表示使用的基数(基)。通常有base10
,即0-9
,但也可以有base2
(二进制)或base16
(十六进制)或任何其他基数。int
可以保持的最大值始终保持不变。请参阅。@HovercraftFullOfEels是的,使用字符串数据类型将更加容易和简单。我坚持使用这种方法,只是因为练习题禁止使用整数到字符串的转换:P尽管int testNumber=in.nextLong()代码>你可能想让它长一点;)忘记了JAVA的基础知识。非常感谢。