java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java输入输出模板

java的输入输出模板(ACM模式)实例代码

作者:一坤年java抽象练习生

由于ACM竞赛题目的输入数据和输出数据一般有多组(不定),并且格式多种多样,所以,如何处理题目的输入输出是对大家的一项最基本的要求,下面这篇文章主要介绍了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

获取不同类型数据要使用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 + " ");
        }
    }

运行结果:



③、

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);
    }
    
}

附:ACM基本的模版

public class Main {

    public static void main(String[] args) {
        //1.数据输入
        Scanner in = new Scanner(System.in);
        //读数字
        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(); //数字到字符串要换行
        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);
        //四舍五入输出小数
        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();
    }
}

总结 

到此这篇关于java的输入输出模板(ACM模式)的文章就介绍到这了,更多相关java输入输出模板内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文