
本文详细介绍了如何在java程序中累加用户输入的一系列数字的总和。通过使用`scanner`类,程序能够读取一行中由空格分隔的多个整数,并利用循环结构逐一累加这些值,最终输出它们的总和。这是一种处理动态输入并进行计算的实用方法。
在编程实践中,经常需要计算用户输入的一系列数字的总和。例如,用户可能在一行中输入多个由空格分隔的数字,而程序需要将它们全部读取并计算出它们的和。本教程将指导您如何使用Java的Scanner类来实现这一功能。
核心概念与实现方法
要累加一系列输入值的总和,我们需要完成以下几个步骤:
- 初始化累加器:声明一个变量来存储总和,并将其初始化为零。
- 获取用户输入:提示用户输入数字,并读取整行输入。
- 解析输入字符串:将包含多个数字的字符串解析成独立的数字。
- 循环累加:遍历解析出的每个数字,将其加到累加器中。
- 显示结果:输出最终的累加总和。
以下是实现这一功能的Java代码示例:
import java.util.Scanner;
public class Example5 {
public static void main(String[] args) {
// 1. 初始化累加器变量
int sum = 0;
// 2. 提示用户输入并读取整行输入
System.out.println("请输入要累加的数字,用空格分隔:");
// 创建一个Scanner来读取System.in的整行输入
// 然后再创建一个新的Scanner来解析这一行字符串中的数字
Scanner lineScanner = new Scanner(System.in);
String inputLine = lineScanner.nextLine(); // 读取用户输入的一整行
Scanner numberScanner = new Scanner(inputLine); // 使用新的Scanner解析这一行
// 3. 循环累加:检查是否有下一个整数,如果有则读取并加到sum中
while (numberScanner.hasNextInt()) {
sum += numberScanner.nextInt(); // 读取下一个整数并累加
}
// 4. 显示结果
System.out.println("所有输入数字的总和为: " + sum);
// 关闭Scanner资源
lineScanner.close();
numberScanner.close();
}
}代码解析
-
int sum = 0;:
立即学习“Java免费学习笔记(深入)”;
- sum 变量用于存储所有输入数字的总和。在开始累加之前,必须将其初始化为 0。
-
Scanner lineScanner = new Scanner(System.in);:
- 创建一个 Scanner 对象 lineScanner,用于从标准输入(键盘)读取数据。
- String inputLine = lineScanner.nextLine();:这行代码会读取用户输入的一整行文本,直到遇到换行符为止。这意味着用户可以输入多个由空格分隔的数字。
-
Scanner numberScanner = new Scanner(inputLine);:
- 这里是关键。我们不是直接用 System.in 的 Scanner 来循环读取数字,而是创建了一个新的 Scanner 对象 numberScanner。
- 这个新的 Scanner 的输入源是之前读取到的 inputLine 字符串。这样做的好处是,我们可以独立地解析这一行字符串中的各个数字,而不会影响到 System.in 的后续读取(如果程序还有其他输入需求的话)。
-
while (numberScanner.hasNextInt()) { ... }:
- 这是一个 while 循环,它会持续执行,直到 numberScanner 中不再有下一个可以被解析为整数的令牌为止。
- numberScanner.hasNextInt(): 检查 numberScanner 是否还有下一个有效的整数。
- sum += numberScanner.nextInt();: 如果有下一个整数,numberScanner.nextInt() 会读取并返回该整数,然后将其加到 sum 变量中。
-
System.out.println("所有输入数字的总和为: " + sum);:
- 循环结束后,sum 变量将包含所有输入数字的总和,然后将其打印到控制台。
-
lineScanner.close(); numberScanner.close();:
- 为了避免资源泄漏,在使用完 Scanner 对象后,应该调用其 close() 方法来释放相关系统资源。
运行示例
当您运行上述程序时,它会等待您的输入。例如:
请输入要累加的数字,用空格分隔: 10 20 30 5 所有输入数字的总和为: 65
注意事项与扩展
- 错误处理:上述代码假设用户会输入有效的整数。如果用户输入了非数字字符(例如 "10 a 20"),numberScanner.hasNextInt() 将会返回 false,导致该字符及其后的内容被跳过。如果需要更严格的错误处理,可以结合 try-catch 块来捕获 InputMismatchException。
- 多行输入:如果需要处理多行输入,并且每行包含一个或多个数字,则需要在外部再加一个循环来读取 System.in 的多行内容,并在每一行上应用上述的 Scanner(inputLine) 模式。
-
更高级的API:对于Java 8及更高版本,可以使用流(Stream)API来实现更简洁的代码,例如 IntStream。这对于处理大量数据或进行更复杂的数据转换时非常有用。例如,读取一行字符串并求和可以简化为:
// 假设 inputLine 已经读取 // int sum = Arrays.stream(inputLine.split("\\s+")) // .filter(s -> !s.isEmpty()) // 过滤空字符串,防止NumberFormatException // .mapToInt(Integer::parseInt) // .sum();然而,对于初学者或简单的场景,使用 Scanner 循环是更直观和易于理解的方法。
总结
通过本教程,您应该已经掌握了如何在Java中有效地读取一行中由空格分隔的多个整数,并计算它们的总和。核心在于利用 Scanner 的嵌套使用:一个 Scanner 用于读取整行输入,另一个 Scanner 用于解析该行中的具体数字。这种方法灵活且易于实现,是处理用户输入序列的常用技巧。










