Java学习记录(一)
·
Java学习记录(一)
文章目录
前言
最近主播练算法基本都在 LeetCode 上写,函数签名都是平台给好的,写久了确实很容易把 Java 的输入输出忘掉。
但一到笔试、机试或者一些 OJ 平台,突然就切成了 ACM 模式,需要自己处理输入输出,这时候就很容易手忙脚乱。所以这里简单记录一下 Java 常见的输入输出写法,方便后面自己随时翻
一、Java 最常用的输入方式
Java 做算法题时,最常用的是这两种:
Scanner
BufferedReader + String.split() 或 StringTokenizer
二、Scanner 写法
1. 读取单个整数
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println(n);
}
}
2. 读取两个整数
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(a + b);
}
}
3. 读取一维数组
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = sc.nextInt();
}
for (int i = 0; i < n; i++) {
System.out.print(nums[i] + " ");
}
}
}
4. 读取字符串
这里的 next() 只能读取一个单词,遇到空格就结束。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
System.out.println(s);
}
}
5. 读取一整行字符串
nextLine() 会读完整一行
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
System.out.println(line);
}
}
三、Scanner 的常见坑
1. nextInt() 和 nextLine() 混用问题
这是最容易踩的坑之一。看下面这个例子:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String s = sc.nextLine();
System.out.println("n = " + n);
System.out.println("s = " + s);
}
}
输入:
10
hello
你可能以为 s 会读到 hello,但实际上第一次 nextLine() 很可能读到的是上一次输入后残留的换行符。
正确写法一般是先补一行:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine(); // 吃掉换行
String s = sc.nextLine();
System.out.println(s);
}
}
除了Scanner还有BufferReader,适合数据量量比较大的输入这里给出模板
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
// BufferedReader:高效输入,适合机试 / OJ
// InputStreamReader(System.in):把标准输入流包装成字符流
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 读取第一行输入,并转成整数
// 假设输入为:5
int n = Integer.parseInt(br.readLine());
// 定义一个长度为 n 的数组
int[] nums = new int[n];
// 读取第二行输入
// 假设输入为:1 2 3 4 5
// StringTokenizer 会默认按空格切分
StringTokenizer st = new StringTokenizer(br.readLine());
// 依次读取每个数字并存入数组
for (int i = 0; i < n; i++) {
nums[i] = Integer.parseInt(st.nextToken());
}
// StringBuilder 用来高效拼接字符串
StringBuilder sb = new StringBuilder();
// 遍历数组,把每个数字拼接到结果中
for (int num : nums) {
sb.append(num).append(" ");
}
// 输出结果
System.out.println(sb.toString());
}
}
四、总结
LeetCode 写久了,忘记 Java 输入输出其实很正常,因为平时根本用不上。
但只要把下面这几个点重新捡起来就够了:
Scanner 适合快速写
BufferedReader 适合机试
StringTokenizer 常配合 BufferedReader
StringBuilder 适合大量输出
注意 nextInt() 和 nextLine() 混用的坑
记录一下,免得下次又忘了。。
更多推荐

所有评论(0)