Java 为什么';t hasNextInt()方法是否适用于大整数?

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

我正在编写一个简单的程序,它接收来自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),这意味着它不会被识别为整数


我认为问题在于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的基础知识。非常感谢。