在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算法題中所有輸入輸出場景,掌握后可高效處理各類數據讀寫需求。