掌握Scanner输入和System.out输出的使用方法与格式化技巧
在Java编程中,输入输出(I/O)是程序与用户交互的重要方式。Java提供了多种输入输出机制,其中最常用的是控制台输入输出。通过Scanner类可以方便地读取用户输入,通过System.out可以向控制台输出信息。
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
scanner.close();
System.out.print("不换行输出");
System.out.println("换行输出");
System.out.printf("格式化: %s %d\n", name, age);
Scanner类是Java中用于读取用户输入的重要工具类,位于java.util包中。它提供了多种方法来读取不同类型的数据,是控制台程序开发的基础。
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();
}
}
方法 | 说明 | 示例 |
---|---|---|
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()) |
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方法提供了强大的格式化功能,可以精确控制输出格式。
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();
}
}
}
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);