java - 为什么 hasNextInt() 方法不适用于大整数?

标签 java java.util.scanner

我正在编写一个简单的程序,它从 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 中的 int32 位 并且只能将 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/

相关文章:

java - 无法获取本地inetAddress

java - 如何提取虚线内的内容

java - 使用扫描仪从文本文件中读取信息

java - 使用扫描仪读取Java中输入的许多字符串

java - 使用一些数组和循环的简化策划游戏

java - 从 Google Cloud Storage 流式传输文件

java - 在有状态处理中,您应该如何处理由于从未达到缓冲区大小而未处理的数据?

java - 如何将 java byte[] 转换为 python 字符串?

java - 漂亮地登录 jooq

java - 如何在 Magic 8 Ball 程序中正确使用 Java 中的方法