java的输入输出模板(ACM模式)
文章目录
- 1、前置准备
- 2、普通输入输出API
- ①、输入API
- ②、输出API
- 3、快速输入输出API
- ①、BufferedReader
- ②、BufferedWriter
- 案例
- 题目描述
- 代码
面试有时候要acm模式,刷惯leetcode可能会手生不会acm模式,该文直接通过几个题来熟悉java的输入输出模板,多写几遍,熟悉即可。
1、前置准备
首先我们需要熟悉在没有idea的情况下如何手写并编译运行一个.java文件。
class Main{public static void main(String[] args) {System.out.println("hello java");}
}
每个.java文件必须有一个类我们一般命名为Main,文件名与代码中的类名必须一样。
命令行输入命令:
javac Main.java
生成Main.class的class文件,随后输入:
java Main
即可运行程序
2、普通输入输出API
import java.util.*;
import java.io.*;
不管如何,最开头这两个头文件都这样引入即可,这两个基本都会用到。
①、输入API
获取不同类型数据要使用nextXxx()的api。
示例代码:
public static void main(String[] args) {Scanner sc = new Scanner(System.in); //用于从控制台读入数据//获取int类型数据Integer a = sc.nextInt();//获取Double类型数据Double d = sc.nextDouble();//获取long类型数据long l = sc.nextLong();//获取short类型数据short b = sc.nextShort();System.out.print(a + " " + d + " " + l + " " + b + " ");}
运行结果:
获取字符串需要用到两个api:
①、in.next() 从缓冲区接收字符遇到空格后停止。 相当于 cin 和 scanf
②、in.nextLine() 从缓冲区接收字符,并且接收空格,遇到换行才停止,并且会自动舍弃换行。 相当于 gets()
public static void main(String[] args) {Scanner sc = new Scanner(System.in); //用于从控制台读入数据String x = sc.next();String s = sc.nextLine();System.out.println("x: " + x);System.out.println("s: " + s);}
运行结果:
可以看到next()遇到空格就会暂停,而nextLine()遇到换行就会暂停。
②、输出API
输出有三种形式;
System.out.print(); // 最后打印结果不会加换行
System.out.println(); // 最后打印结果加换行
System.out.printf(); // 类似c语言中的printf。
直接代码中来看:
①、
public static void main(String[] args) {for(int i = 0; i < 3; i ++ ) {System.out.print(i + " ");}}
运行结果:
0 1 2
②、
public static void main(String[] args) {for(int i = 0; i < 3; i ++ ) {System.out.println(i + " ");}}
运行结果:
0
1
2
③、
public static void main(String[] args) {for(int i = 0; i < 3; i ++ ) {System.out.printf("%d ", i);}}
运行结果:
0 1 2
3、快速输入输出API
①、BufferedReader
public static void main(String[] args) throws Exception{BufferedReader in = new BufferedReader(new InputStreamReader(System.in));String s = in.readLine();String[] arr = in.readLine().split(" ");System.out.println("s: " + s);System.out.print("arr: ");for (String str : arr) {System.out.print(str + " ");}}
运行结果:
补充:in.read()方法返回值为Integer,用于读取整数。
②、BufferedWriter
当数据量大的时候一定要使用这个类进行输出,谨记!
public static void main(String[] args) throws Exception{BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));int a = 68;char b = '2';String c = "3";bw.write(a);bw.write("\n");bw.write(b);bw.write("\n");bw.write(c);bw.write("\n");bw.flush();}
运行结果:
D
2
3
在输出整型要注意,会输出对应ASCII码值的字符,比如ASCII码值为68的字符是D。
解决方式:
bw.write(a + "");
bw.write(Integer.toString(a));
尽量将其转为字符串进行输出。
输出结果:
68
案例
通过一道算法题,来练习熟悉一下api。
题目描述
给定你一个长度为 n的整数数列。
请你使用快速排序对这个数列按照从小到大进行排序。
并将排好序的数列按顺序输出。
输入格式
输入共两行,第一行包含整数 n。
第二行包含 n个整数(所有整数均在 1∼109范围内),表示整个数列。
输出格式
输出共一行,包含 n个整数,表示排好序的数列。
数据范围
1≤n≤100000
输入样例:
5
3 1 2 4 5
输出样例:
1 2 3 4 5
代码
这里可以将new Inputstream()用new BufferedInputStream()来替代,读取速度更快。
import java.util.*;
import java.io.*;class Main{public static void main(String[] args) throws Exception {Scanner sc = new Scanner(new BufferedInputStream(System.in));Integer n = sc.nextInt();Integer[] nums = new Integer[n + 1];for(int i = 0; i < n; i ++ ) {Integer x = sc.nextInt();nums[i] = x;}quick_sort(nums, 0, n - 1);for(int i = 0; i < n; i ++ ) {System.out.print(nums[i] + " ");}}public static void quick_sort(Integer[] nums, int l, int r) {if(l >= r) return;int mid = nums[l + r >>> 1];int i = l - 1, j = r + 1;while(i < j) {do i ++; while(nums[i] < mid);do j --; while(nums[j] > mid);if(i < j) {Integer tem = nums[i];nums[i] = nums[j];nums[j] = tem;}}quick_sort(nums, l, j); quick_sort(nums, j + 1, r);}}