Java算法题中的输入输出流
本文最后更新于32 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

在Java算法题中,处理输入输出主要依赖系统流(System.inSystem.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(); // 关闭流(会自动刷新)
    }
}

三、选择建议

  1. 小规模输入输出:优先用Scanner + System.out.println(),代码简洁易写。
  2. 大规模输入(如算法竞赛):用BufferedReader(读)+ BufferedWriter(写),效率更高。
  3. 格式化输出:用System.out.printf(),控制格式更方便。

这些方法基本能覆盖Java算法题中所有输入输出场景,掌握后可高效处理各类数据读写需求。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇