java的輸入輸出模板(ACM模式)實例代碼
面試有時候要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
獲取不同類型數(shù)據(jù)要使用nextXxx()的api。
示例代碼:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //用于從控制臺讀入數(shù)據(jù)
//獲取int類型數(shù)據(jù)
Integer a = sc.nextInt();
//獲取Double類型數(shù)據(jù)
Double d = sc.nextDouble();
//獲取long類型數(shù)據(jù)
long l = sc.nextLong();
//獲取short類型數(shù)據(jù)
short b = sc.nextShort();
System.out.print(a + " " + d + " " + l + " " + b + " ");
}
運行結(jié)果:

獲取字符串需要用到兩個api:
①、in.next() 從緩沖區(qū)接收字符遇到空格后停止。 相當于 cin 和 scanf
②、in.nextLine() 從緩沖區(qū)接收字符,并且接收空格,遇到換行才停止,并且會自動舍棄換行。 相當于 gets()
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //用于從控制臺讀入數(shù)據(jù)
String x = sc.next();
String s = sc.nextLine();
System.out.println("x: " + x);
System.out.println("s: " + s);
}
運行結(jié)果:

可以看到next()遇到空格就會暫停,而nextLine()遇到換行就會暫停。
②、輸出API
輸出有三種形式;
System.out.print(); // 最后打印結(jié)果不會加換行
System.out.println(); // 最后打印結(jié)果加換行
System.out.printf(); // 類似c語言中的printf。
直接代碼中來看:
①、
public static void main(String[] args) {
for(int i = 0; i < 3; i ++ ) {
System.out.print(i + " ");
}
}
運行結(jié)果:
0 1 2
②、
public static void main(String[] args) {
for(int i = 0; i < 3; i ++ ) {
System.out.println(i + " ");
}
}
運行結(jié)果:
0
1
2
③、
public static void main(String[] args) {
for(int i = 0; i < 3; i ++ ) {
System.out.printf("%d ", i);
}
}
運行結(jié)果:
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 + " ");
}
}
運行結(jié)果:

補充:in.read()方法返回值為Integer,用于讀取整數(shù)。
②、BufferedWriter
當數(shù)據(jù)量大的時候一定要使用這個類進行輸出,謹記!
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();
}
運行結(jié)果:
D
2
3
在輸出整型要注意,會輸出對應(yīng)ASCII碼值的字符,比如ASCII碼值為68的字符是D。
解決方式:
bw.write(a + ""); bw.write(Integer.toString(a));
盡量將其轉(zhuǎn)為字符串進行輸出。
輸出結(jié)果:
68
案例
通過一道算法題,來練習(xí)熟悉一下api。
題目描述
給定你一個長度為 n的整數(shù)數(shù)列。
請你使用快速排序對這個數(shù)列按照從小到大進行排序。
并將排好序的數(shù)列按順序輸出。
輸入格式
輸入共兩行,第一行包含整數(shù) n。
第二行包含 n個整數(shù)(所有整數(shù)均在 1∼109范圍內(nèi)),表示整個數(shù)列。
輸出格式
輸出共一行,包含 n個整數(shù),表示排好序的數(shù)列。
數(shù)據(jù)范圍
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);
}
}
附:ACM基本的模版
public class Main {
public static void main(String[] args) {
//1.數(shù)據(jù)輸入
Scanner in = new Scanner(System.in);
//讀數(shù)字
int numLen = in.nextInt();
int[] numArr = new int[numLen];
int i = 0;
while(in.hasNextInt() && i < numLen){
numArr[i] = in.nextInt();
i++;
}
//讀字符串
int strLen = in.nextInt();
in.nextLine(); //數(shù)字到字符串要換行
String[] strArr = new String[strLen];
//或者 strArr[] = in.nextLine().split(" ");
int j = 0;
while(in.hasNextLine() && j < strLen){
strArr[j] = in.nextLine();
j++;
}
//2. 處理
Solution solution = new Solution();
String result = solution.process(numArr, strArr);
//3. 輸出
System.out.println(result);
//四舍五入輸出小數(shù)
String str = String.format("%.2f",3.555);
System.out.println(str);
}
}
//下面類似 LeetCode 的核心代碼模式
class Solution {
public String process(int[] nums, String[] strs) {
StringBuilder sb = new StringBuilder();
sb.append(Arrays.toString(nums));
sb.append(" && ");
sb.append(Arrays.toString(strs));
return sb.toString();
}
}總結(jié)
到此這篇關(guān)于java的輸入輸出模板(ACM模式)的文章就介紹到這了,更多相關(guān)java輸入輸出模板內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java lambda表達式實現(xiàn)Flink WordCount過程解析
這篇文章主要介紹了Java lambda表達式實現(xiàn)Flink WordCount過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02
shuffle的關(guān)鍵階段sort(Map端和Reduce端)源碼分析
今天小編就為大家分享一篇關(guān)于shuffle的關(guān)鍵階段sort(Map端和Reduce端)源碼分析,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01
Java使用JCommander實現(xiàn)解析命令行參數(shù)
jcommander?是一個只有幾十?kb?的?Java?命令行參數(shù)解析工具,可以通過注解的方式快速實現(xiàn)命令行參數(shù)解析,本文就來和大家介紹一下JCommander是如何解析命令行參數(shù)吧2023-06-06
springboot整合jquery和bootstrap框架過程圖解
這篇文章主要介紹了springboot整合jquery和bootstrap框架過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12
Hibernate三種狀態(tài)和Session常用的方法
本文主要介紹了Hibernate三種狀態(tài)和Session常用的方法,具有很好的參考價值,下面跟著小編一起來看下吧2017-03-03
MyBatis-Plus實現(xiàn)自動填充功能的示例代碼
在數(shù)據(jù)庫設(shè)計中,常常有一些字段每次都需要賦值,如創(chuàng)建時間、更新時間、操作人、刪除標識等,有沒有框架級的技術(shù),全局處理這樣的統(tǒng)一字段呢?當然有,Mybatis-Plus自動填充技術(shù)幫我們解決問題,本文給大家詳細介紹了MyBatis-Plus實現(xiàn)自動填充功能,需要的朋友可以參考下2025-07-07
Gradle的安裝和IDEA集成、項目導(dǎo)入的詳細教程
這篇文章主要介紹了Gradle的安裝和IDEA集成、項目導(dǎo)入的詳細教程,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
Springboot獲取bean實例之SpringContextUtil詳解
這篇文章主要介紹了Springboot獲取bean實例之SpringContextUtil使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03

