全网最详细!!算法竞赛中输入输出

在算法竞赛中,根据题目类型的不同,读入数据和输出数据的类型和数据量也不同,有时候,掌握各种各样的输入输出可以让你赢在起跑线上,不至于因为输入数据或者输出数据就超时了。因为c的快读快写网上教程已经很多了,下面我写一些java常用的输出输出方法。这篇博客面向的是一些算法入门的萌新写的,简单介绍了下各种输入输出的优缺点。
输入
第一种,最常见,但是也很费事.简单的输入可以用这种但是慢

Scanner sc = new Scanner(System.in);

第二种,也比较简单,稍微比第一种快些,但是会耗费内存

Scanner cin = new Scanner(new BufferedInputStream(System.in));  

第三种,运用InputStream 输入速度会快很多,竞赛常用的输入方法。不过后续的数据处理就没有前面两种那么直接,碰到整型需要转换。

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

第四种,最快,但是更难用,一般很少用

StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));

另外有时候我们有时候会需要从文件中读入数据,一个原因是有时候题目的数据是在文件里,另一个原因是有时候在控制台边读入边输出有时候会发生混乱,所以分开读入和输出
(1)用Scanner

File file = new File("D:\\input.txt");
Scanner sc = new Scanner(file);

(2)用BufferReader

File file = new File("D:\\input.txt");
BufferedReader br=new BufferedReader(new FileReader(file));

输出
第一种,最标准的输出方法,一般输出也用这个

System.out.println();     //如果去掉ln就是不换行 

第二种,C语言风格的输出

System.out.printf();

第三种,快速输出,当输出的数据很大时,用这个,并且一定要关闭close,不然会输出错误

PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));   
out.close();

向文件输出数据,和向文件读入数据其实是一个道理
(1)用PrintStrem

PrintStream ps=new PrintStream(new FileOutputStream("D:\\output.txt"));  
System.setOut(ps);  //可以使输出在文件而不是控制台

(2)用PrintWrite

File file =new File("D:\\output.txt");
		PrintWriter pw=new PrintWriter(file);
		pw.print("dd");
		pw.close();

除了上面的常见的输入输出,有些大佬为了追求极致的速度,会使用输入输出挂,但我这里就不再介绍了,因为代码量很多,一般在极少数情况才要使用,下面放出一种输入挂,仅供参考。

class InputReader{
        StreamTokenizer tokenizer;
        public InputReader(InputStream stream){
            tokenizer=new StreamTokenizer(new BufferedReader(new InputStreamReader(stream)));
            tokenizer.ordinaryChars(33,126);
            tokenizer.wordChars(33,126);
        }
        public String next() throws IOException {
            tokenizer.nextToken();
            return tokenizer.sval;
        }
        public int nextInt() throws IOException {
            return Integer.parseInt(next());
        }
        public long nextLong() throws IOException {
            return Long.parseLong(next());
        }
        public boolean hasNext() throws IOException {
            int res=tokenizer.nextToken();
            tokenizer.pushBack();
            return res!=tokenizer.TT_EOF;
        }
        
        public BigInteger nextBigInteger() throws IOException {
        	return new BigInteger(next());
        }
    }
发布了26 篇原创文章 · 获赞 18 · 访问量 4632

猜你喜欢

转载自blog.csdn.net/qq_43751506/article/details/104939210
今日推荐