第9章 Java输入和输出
面包屑导航 章节头部 学习目标
学习目标
- 掌握Scanner类的基本使用方法和各种输入方法
- 学会使用System.out进行基本输出和格式化输出
- 理解printf方法的格式化语法和常用格式符
- 掌握控制台交互程序的设计和实现
- 了解输入输出的异常处理和最佳实践
- 学会创建用户友好的控制台应用程序
输入输出概述
Java输入输出概述
在Java编程中,输入输出(I/O)是程序与用户交互的重要方式。Java提供了多种输入输出机制,其中最常用的是控制台输入输出。通过Scanner类可以方便地读取用户输入,通过System.out可以向控制台输出信息。
Scanner输入
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
scanner.close();
- 读取各种数据类型
- 支持输入验证
- 处理用户交互
- 灵活的输入方式
System.out输出
System.out.print("不换行输出");
System.out.println("换行输出");
System.out.printf("格式化: %s %d\n", name, age);
- 基本文本输出
- 格式化输出
- 控制输出格式
- 美化显示效果
Scanner类详解
Scanner类详解
Scanner类是Java中用于读取用户输入的重要工具类,位于java.util包中。它提供了多种方法来读取不同类型的数据,是控制台程序开发的基础。
Scanner基本使用
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
// 创建Scanner对象
Scanner scanner = new Scanner(System.in);
// 读取用户输入
System.out.print("请输入您的姓名: ");
String name = scanner.nextLine();
System.out.print("请输入您的年龄: ");
int age = scanner.nextInt();
// 输出结果
System.out.println("您好 " + name + ",您今年 " + age + " 岁");
// 关闭Scanner
scanner.close();
}
}
Scanner方法详解
| 方法 | 说明 | 示例 |
|---|---|---|
| next() | 读取单个单词(到空格为止) | String word = scanner.next(); |
| nextLine() | 读取整行(到换行符为止) | String line = scanner.nextLine(); |
| nextInt() | 读取整数 | int num = scanner.nextInt(); |
| nextDouble() | 读取浮点数 | double d = scanner.nextDouble(); |
| nextBoolean() | 读取布尔值 | boolean b = scanner.nextBoolean(); |
| hasNext() | 检查是否有下一个输入 | while(scanner.hasNext()) |
| hasNextInt() | 检查下一个是否为整数 | if(scanner.hasNextInt()) |
注意事项:使用nextInt()等方法后,如果要使用nextLine(),需要先调用一次nextLine()清除缓冲区Scanner使用完毕后应该调用close()方法释放资源建议使用try-catch处理输入异常
System.out输出详解
System.out输出详解
System.out是Java中标准输出流,提供了多种输出方法。掌握这些方法可以让程序输出更加美观和专业。
基本输出方法
// print() - 不换行输出
System.out.print("Hello ");
System.out.print("World!");
// 输出: Hello World!
// println() - 换行输出
System.out.println("第一行");
System.out.println("第二行");
// 输出:
// 第一行
// 第二行
// 输出不同数据类型
System.out.println("字符串: " + "Hello");
System.out.println("整数: " + 42);
System.out.println("浮点数: " + 3.14);
System.out.println("布尔值: " + true);
printf格式化输出
printf方法提供了强大的格式化功能,可以精确控制输出格式。
String name = "张三";
int age = 25;
double salary = 8500.5;
// 基本格式化
System.out.printf("姓名: %s, 年龄: %d, 薪资: %.2f\n", name, age, salary);
// 输出: 姓名: 张三, 年龄: 25, 薪资: 8500.50
// 字符串格式化
System.out.printf("左对齐: %-10s|\n", name);
System.out.printf("右对齐: %10s|\n", name);
// 输出:
// 左对齐: 张三 |
// 右对齐: 张三|
// 数字格式化
System.out.printf("整数: %d\n", age);
System.out.printf("带符号: %+d\n", age);
System.out.printf("补零: %05d\n", age);
// 输出:
// 整数: 25
// 带符号: +25
// 补零: 00025
格式化符号详解
| 格式符 | 说明 | 示例 |
|---|---|---|
| %s | 字符串 | printf("%s", "Hello") |
| %d | 整数 | printf("%d", 42) |
| %f | 浮点数 | printf("%.2f", 3.14) |
| %c | 字符 | printf("%c", 'A') |
| %b | 布尔值 | printf("%b", true) |
| %x | 十六进制 | printf("%x", 255) |
| %o | 八进制 | printf("%o", 64) |
| %e | 科学计数法 | printf("%e", 1234.5) |
实际应用示例
实际应用示例
交互式计算器
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("=== 简单计算器 ===");
try {
System.out.print("请输入第一个数字: ");
double num1 = scanner.nextDouble();
System.out.print("请输入运算符 (+, -, *, /): ");
String operator = scanner.next();
System.out.print("请输入第二个数字: ");
double num2 = scanner.nextDouble();
double result = 0;
boolean validOperation = true;
switch (operator) {
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;
break;
case "*":
result = num1 * num2;
break;
case "/":
if (num2 != 0) {
result = num1 / num2;
} else {
System.out.println("错误:除数不能为零!");
validOperation = false;
}
break;
default:
System.out.println("错误:无效的运算符!");
validOperation = false;
}
if (validOperation) {
System.out.printf("结果: %.2f %s %.2f = %.2f\n",
num1, operator, num2, result);
}
} catch (Exception e) {
System.out.println("输入错误,请输入有效的数字!");
} finally {
scanner.close();
}
}
}
💻 查看完整代码 - 在线IDE体验 常见问题和注意事项
常见问题和注意事项
输入缓冲区问题
问题:使用nextInt()后再使用nextLine()读不到内容问题代码:Scanner scanner = new Scanner(System.in);
System.out.print("输入年龄: ");
int age = scanner.nextInt(); // 只读取数字,不消费换行符
System.out.print("输入姓名: ");
String name = scanner.nextLine(); // 读取到空字符串解决方案:Scanner scanner = new Scanner(System.in);
System.out.print("输入年龄: ");
int age = scanner.nextInt();
scanner.nextLine(); // 清除缓冲区中的换行符
System.out.print("输入姓名: ");
String name = scanner.nextLine(); // 正常读取
输入验证
Scanner scanner = new Scanner(System.in);
// 验证整数输入
int number = 0;
boolean validInput = false;
while (!validInput) {
System.out.print("请输入一个整数: ");
if (scanner.hasNextInt()) {
number = scanner.nextInt();
validInput = true;
} else {
System.out.println("输入无效,请输入一个整数!");
scanner.next(); // 清除无效输入
}
}
System.out.println("您输入的整数是: " + number);
最佳实践总结
最佳实践总结
输入输出最佳实践
推荐做法
- 及时关闭Scanner资源
- 使用try-catch处理输入异常
- 验证用户输入的有效性
- 使用printf进行格式化输出
- 清除输入缓冲区
- 提供清晰的输入提示
应该避免
- 忘记关闭Scanner
- 不处理输入异常
- 混用next()和nextLine()不清缓冲区
- 不验证用户输入
- 输出格式混乱
- 缺少用户友好的提示
本章小结
本章小结
- Scanner输入:掌握了Scanner类的各种输入方法,包括next()、nextLine()、nextInt()等
- System.out输出:学会了使用print()、println()和printf()进行不同格式的输出
- 格式化输出:理解了printf的格式化语法,能够创建美观的输出格式
- 异常处理:了解了输入输出中常见的异常和处理方法
- 最佳实践:掌握了输入输出编程的最佳实践和注意事项
- 实际应用:能够创建用户友好的控制台交互程序
章节导航 上一章:运算符 章节测试 下一章:表达式和语句 外部脚本