当前位置:首页 > 后端开发 > 正文

Java如何获取输入数字

Java中获取输入的数字通常使用 Scanner类,导入java.util. Scanner后创建对象,调用nextInt()、nextDouble()等方法读取对应类型数值,也可用BufferedReader结合Integer.parseInt()转换实现。

使用 Scanner 类(推荐初学者)

Scanner 是 java.util 包中的工具类,提供简单的文本解析功能,适合基础输入操作。

完整示例代码

import java.util.Scanner; public class ScannerExample { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 创建Scanner对象 System.out.print("请输入整数:"); int numberInt = scanner.nextInt(); // 直接读取整数 System.out.print("请输入小数:"); double numberDouble = scanner.nextDouble(); // 直接读取小数 System.out.println("整数:" + numberInt); System.out.println("小数:" + numberDouble); scanner.close(); // 关闭资源防止内存泄漏 } }

关键注意事项

  1. 输入验证

    使用 hasNextInt() 或 hasNextDouble() 避免无效输入导致的崩溃:

    Java如何获取输入数字 第1张

  2. 资源释放

    务必调用 scanner.close() 释放系统资源(如从文件读取时)。

  3. 数据类型匹配

    Java如何获取输入数字 第2张

    • nextInt() → 整数
    • nextDouble() → 双精度小数
    • nextFloat() → 单精度小数
    • 使用 BufferedReader + InputStreamReader(高性能场景)

      适用于需要高效读取大量输入的场景(如文件/网络流),需手动转换数据类型。

      完整示例代码

      import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class BufferedReaderExample { public static void main(String[] args) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try { System.out.print("请输入整数:"); int numberInt = Integer.parseInt(reader.readLine()); // 字符串转整数 System.out.print("请输入小数:"); double numberDouble = Double.parseDouble(reader.readLine()); // 字符串转小数 System.out.println("整数:" + numberInt); System.out.println("小数:" + numberDouble); } catch (IOException e) { System.err.println("输入输出错误:" + e.getMessage()); } catch (NumberFormatException e) { System.err.println("格式错误:必须输入数字!"); } finally { try { reader.close(); // 确保资源关闭 } catch (IOException e) { System.err.println("关闭资源失败:" + e.getMessage()); } } } }

      关键优势与风险控制

      1. 异常处理

        • IOException:处理输入流错误
        • NumberFormatException:捕获非数字输入
      2. 性能优势

        BufferedReader 的缓冲机制减少I/O操作次数,适合高频输入场景。

        Java如何获取输入数字 第3张

      3. 灵活转换

        通过 Integer.parseInt() 或 Double.parseDouble() 自由转换类型。

      4. 方法对比与选型建议

        特性 Scanner 类 BufferedReader 类
        易用性 ⭐⭐⭐⭐ (直接解析数字) ⭐⭐ (需手动转换)
        性能 ⭐⭐ (小型输入) ⭐⭐⭐⭐ (缓冲优化)
        异常控制 ⭐⭐ (需配合 hasNextXxx 验证) ⭐⭐⭐ (明确捕获异常)
        适用场景 控制台交互、简单应用 文件/网络流、高频输入


        最佳实践总结

        1. 优先选择 Scanner

          适合大多数控制台程序,简化数字解析流程。

        2. 严格验证输入

          使用 hasNextInt() 或 try-catch 避免非法输入崩溃。

        3. 资源必须关闭

          在 finally 块或 try-with-resources 中关闭流: try (Scanner scanner = new Scanner(System.in)) { // Java 7+ 自动关闭 // 操作代码 }

        4. 明确数据类型

          整数用 int/long,小数用 float/double,避免精度损失。

        引用说明:本文代码示例基于 Oracle 官方 Java 17 文档,遵循 Java 标准库规范,异常处理逻辑参考《Effective Java》第 3 版条目 72(妥善处理异常)。

0