本文最后更新于32 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
在Java算法题中,处理输入输出主要依赖系统流(System.in
和System.out
),常用的方法总结如下:
一、输入方法(读取系统输入)
主要通过java.util.Scanner
类或BufferedReader
类实现,适用于不同场景:
1. Scanner类(简单场景,代码简洁)
最常用的输入工具,支持多种数据类型的直接读取,常用方法:
– nextInt()
:读取整数(int
)
– nextLong()
:读取长整数(long
)
– nextDouble()
/nextFloat()
:读取浮点数
– next()
:读取字符串(以空格/回车为分隔符)
– nextLine()
:读取一整行字符串(包括空格)
– hasNextXxx()
:判断是否还有对应类型的输入(循环读取时常用)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt(); // 读整数
String s = sc.next(); // 读字符串
double d = sc.nextDouble(); // 读浮点数
// 循环读取多个整数(直到没有输入)
while (sc.hasNextInt()) {
int num = sc.nextInt();
// 处理逻辑
}
sc.close(); // 建议关闭资源
}
}
2. BufferedReader类(高效场景,大输入量)
- 基于字符流的缓冲输入,速度快于
Scanner
,适合大规模输入(如十万级数据) - 需要配合
InputStreamReader
转换流使用,且读取后需手动转换数据类型
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 读取一行字符串(返回null表示输入结束)
String line = br.readLine();
// 读取整数(需手动转换)
int num = Integer.parseInt(br.readLine());
// 循环读取多行
String s;
while ((s = br.readLine()) != null) {
// 处理每行数据
}
br.close(); // 关闭资源
}
}
二、输出方法(写入系统输出)
主要通过System.out
相关方法实现,常用:
1. print() / println()(简单输出)
print(x)
:输出数据x
,不换行println(x)
:输出数据x
并换行(最常用)- 支持直接输出基本类型、字符串、对象(会自动调用
toString()
)
System.out.print("Hello"); // 输出不换行
System.out.println(123); // 输出整数并换行
System.out.println("World"); // 输出字符串并换行
2. printf()(格式化输出)
- 类似C语言的
printf
,支持格式控制符(如%d
整数、%s
字符串、%f
浮点数等) - 适合需要固定格式的输出(如保留小数位、对齐等)
int a = 10;
double b = 3.14159;
System.out.printf("整数:%d,浮点数:%.2f%n", a, b);
// 输出:整数:10,浮点数:3.14(%n表示换行,跨平台)
3. BufferedWriter类(高效输出,大输出量)
- 缓冲输出流,速度快于
System.out
,适合大规模输出 - 需手动调用
flush()
刷新缓冲区(或关闭流时自动刷新)
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("Hello"); // 写入字符串
bw.newLine(); // 换行(跨平台)
bw.write(String.valueOf(123)); // 写入整数(需转为字符串)
bw.flush(); // 刷新缓冲区(必须调用,否则可能不输出)
bw.close(); // 关闭流(会自动刷新)
}
}
三、选择建议
- 小规模输入输出:优先用
Scanner
+System.out.println()
,代码简洁易写。 - 大规模输入(如算法竞赛):用
BufferedReader
(读)+BufferedWriter
(写),效率更高。 - 格式化输出:用
System.out.printf()
,控制格式更方便。
这些方法基本能覆盖Java算法题中所有输入输出场景,掌握后可高效处理各类数据读写需求。