Scanner与System.out为什么慢,快速输入输出模版,目录牛客.dd爱框框快速输入的代码快速输入输出快的原因 AC代码

简介: Scanner与System.out为什么慢,快速输入输出模版,目录牛客.dd爱框框快速输入的代码快速输入输出快的原因 AC代码

JAVA处理IO有两套标准

1.字节流

2.字符流

牛客.dd爱框框

快速输入的代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
public class Read {
    //字符串裁剪
    StringTokenizer st=new StringTokenizer("");
    //1.把字节流转化为字符流
    从IO设备中拿数据,先是建立一个内存缓冲区,然后以后都从他的内存缓冲区拿数据,
    BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
    // 再从从内存缓冲区里面拿数据
    String next()throws IOException{
        //看他后面还有没有要裁切的数据
        while(!st.hasMoreTokens()){
            //bf.nextLine:直接在内存缓存区里面,拿一行数据,交给这个字符串裁切对象
            st=new StringTokenizer(bf.readLine());
        }
        //再返回新读入这一行
        return  st.nextToken();
    }
 
    String nextLine() throws IOException
    {
        return bf.readLine();
    }
 
    int nextInt() throws IOException
    {
        return Integer.parseInt(next());
    }
 
    long nextLong() throws IOException
    {
        return Long.parseLong(next());
    }
 
    double nextDouble() throws IOException
    {
        return Double.parseDouble(next());
    }
}

快速输入输出快的原因

我开始真的是不清楚,这种输入输出有啥用,也没有人给我讲讲,它的原理是什么

直到,有些事情,自己经历过就清楚什么用,我就再想我的代码有啥问题,自己检查半天也不清楚啥问题,以为有奇怪的吊炸天的例子,直到我看到题解里面快速输出。我去尝试,发现确实是这样

Scanner与System.out,这两个都是他们区访问IO设备,每次输入输出都会访问IO设备

那么BufferedReader起到作用的是什么呢

next()的意思

如何快速读入呢(在这里,使用的是)

public static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));

这里其实bufferedWriter,就已经足够,但是使用这个PrintWriter,我们可以像是之前一样,使用println之类的,换句话学习成本低。

AC代码

import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
public class Main{
    public static void main(String[]args) throws IOException{
        Read scanner=new Read();
        int a1=scanner.nextInt();
        int b1=scanner.nextInt();
        int []a=new int[a1];
        for(int i=0;i<a1;i++){
            a[i]=scanner.nextInt();
        }
        int left=0;
        int right=0;
        int count=0;
        int []sum=new int[2];
        sum[0]=Integer.MAX_VALUE;
        sum[1]=Integer.MAX_VALUE;
        int ret=Integer.MAX_VALUE;
        while(right<a1&&left<=right) {
            if (count < b1)
                count += a[right];
                while (count >= b1&&left<=right) {
                    if (right - left + 1 <= ret && count >= b1) {
                        if (right - left + 1 == ret) {
                            sum[0] = Math.min(left + 1, sum[0]);
                            sum[1] = Math.min(right + 1, sum[1]);
                        } else {
                            sum[0] = left + 1;
                            sum[1] = right + 1;
                            ret = Math.min(right - left + 1, ret);
                        }
                    }
                    count -= a[left];
                    left++;
                }
            right++;
            }
 
        System.out.print(sum[0]+" "+sum[1]);
    }
    
}
class Read {
    //字符串裁剪
    StringTokenizer st=new StringTokenizer("");
    //1.把字节流转化为字符流
    从IO设备中拿数据,先是建立一个内存缓冲区,然后以后都从他的内存缓冲区拿数据,
    BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
    // 再从从内存缓冲区里面拿数据
    String next()throws IOException{
        //看他后面还有没有要裁切的数据
        while(!st.hasMoreTokens()){
            //bf.nextLine:直接在内存缓存区里面,拿一行数据,交给这个字符串裁切对象
            st=new StringTokenizer(bf.readLine());
        }
        //再返回新读入这一行
        return  st.nextToken();
    }
 
    String nextLine() throws IOException
    {
        return bf.readLine();
    }
 
    int nextInt() throws IOException
    {
        return Integer.parseInt(next());
    }
 
    long nextLong() throws IOException
    {
        return Long.parseLong(next());
    }
 
    double nextDouble() throws IOException
    {
        return Double.parseDouble(next());
    }
}


相关文章
|
3月前
|
人工智能 Java 容器
十个Java字符串操作示例程序
十个Java字符串操作示例程序
27 1
|
5月前
C primer plus 学习笔记 第13章 文件输入/输出
C primer plus 学习笔记 第13章 文件输入/输出
|
6月前
|
JavaScript 前端开发 数据库
输入输出举例及其代码实现
在计算机编程中,输入输出(Input/Output,简称I/O)是非常基础且关键的概念。输入是指程序从外部设备(如键盘、文件、网络等)获取数据,而输出则是程序将结果或信息发送到外部设备(如显示器、打印机、文件等)。下面将通过几个简单的例子,以及相应的代码实现,来展示不同编程语言中的输入输出操作。
124 0
|
人工智能 Python
Python工具:将文件夹下的视频按照帧数输出图片文件(含代码)
Python工具:将文件夹下的视频按照帧数输出图片文件(含代码)
153 0
输入一个整形数(最多可以到亿位),然后按汉语的习惯,将其读出来并输出。如1052,读作:一千零五十二。 程序运行示例: 1052 一千零五十二
输入一个整形数(最多可以到亿位),然后按汉语的习惯,将其读出来并输出。如1052,读作:一千零五十二。 程序运行示例: 1052 一千零五十二
180 0
|
缓存 移动开发 编译器
C++STL开发温习与总结(六): 6.C++语言输入/输出流定义之输入/输出格式控制
C++STL开发温习与总结(六): 6.C++语言输入/输出流定义之输入/输出格式控制
C++STL开发温习与总结(六): 6.C++语言输入/输出流定义之输入/输出格式控制
|
Java
编写Java程序,判断输入的三条长度的边,是否能构成三角形
编写Java程序,判断输入的三条长度的边,是否能构成三角形
283 0
编写Java程序,判断输入的三条长度的边,是否能构成三角形
|
Java
编写Java程序,实现从控制台输入对应个数的整数,输出对输入整数的从大到小显示
编写Java程序,实现从控制台输入对应个数的整数,输出对输入整数的从大到小显示
505 0
编写Java程序,实现从控制台输入对应个数的整数,输出对输入整数的从大到小显示
|
Java
编写Java程序_输入三个整数x,y,z,请把这三个数由小到大输出,请写出实现代码。(3种方法)
编写Java程序_输入三个整数x,y,z,请把这三个数由小到大输出,请写出实现代码。(3种方法)
759 0
编写Java程序_输入三个整数x,y,z,请把这三个数由小到大输出,请写出实现代码。(3种方法)