蓝桥杯JAVA-1.入门必知、正常输入输出和快速输入输出

蓝桥杯Java-01.入门必知、正常输入输出和快速输入输出

不要让想得太多毁掉你,行动是打破僵局最好的方法,在你弱小时,只要多做,多尝试,多是错,你才能收获,才能进步,未能到达一定高度之前,迷茫本身,毫无意义。

本文主要介绍竞赛答题入门知识,正常输入输出和快速输入输出的知识

1.必知常识

主类名必须是Main,并且交代码时不要加入包名(package),但需要把导入的包加上(import)。如:

//package com.zxl.fastinput; 不要package
import java.util.Scanner; //import导包
public class Main {  //主函数名Main
    public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
    }
}

2.输入输出

2.1 正常输入输出

2.1.1单个数据输入

Java中的输入输出无法和c++一样cin通吃,但是和c语言有相似之处

首先需要定义一个Scanner对象接收控制台输入的数据,需要导入包 import java.util.Scanner;

Scanner cin = new Scanner(System.in);

在使用cin.nextXXX()f方法接受各种类型的数据

//1.导包 import 关键字导入Scanner类
import java.util.Scanner;

public class Main {  //主函数名Main
    public static void main(String[] args) {
        //2.创建scanner类接受键盘输入内容
        Scanner cin = new Scanner(System.in);

        //cin.nextXXX方法接收不同类型的输入内容
        int numbers=cin.nextInt(); //int类型 整型
        System.out.println(numbers);
        float f=cin.nextFloat();// float类型 单精度浮点型
        System.out.println(f);
        double d=cin.nextDouble();//double类型 双精度浮点型
        System.out.println(d);
        String s=cin.next(); //String类型 字符串型 遇到空格结束
        System.out.println(s);
        String str=cin.nextLine(); //String类型 读取一行数据,遇到换行结束,类似gets
        //有开就有关
        cin.close();

            }
}

2.1.2 多组数据输入

多组数据输入。使用cin.hasNext。返回值是bool值,作用是当在缓冲区内扫描到字符时,会返回true, 否则会发生阻塞,等待数据输入。

使用 while + cin.hasNext() 相当于 while(scanf())。和cin.nextXXX()方法类似,cin.hasNextXXX()也有针对不同类型变量的方法。如下:

cin.hasNext():


import java.util.Scanner;

public class demo01 {
    public static void main(String[] args) {
        /*多组数据类型输入 cin.hashNext()
        * 返回值是bool值,作用是当在缓冲区内扫描到字符时,会返回true,
        * 否则发生阻塞,等待数据输入
        * while+cin.nextNext 相当于while(scanf()) 和cin.nextXXX类似,cin.hashNextXXX()也有针对不同类型变量的方法。
        * */
        Scanner cin = new Scanner(System.in);
        float a,b;
        int c;
        while (cin.hasNext()){
            a=cin.nextFloat();
            b=cin.nextFloat();
            c=cin.nextInt();
            System.out.println(a+" "+b+" "+c);
        }
        cin.close();

    }
}

2.1.3输出

java中往控制台输出的几种常用函数。

public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        String s = "asdf";
        int a = 123;
        System.out.println("234"); //输出并换行
        System.out.print(165); //输出不换行
        System.out.printf("%d %s",a,s); //输出不换行
        cin.close();
    }
}

//输出
234
165123 asdf

2.2 快速输入输出

2.2.1输出

BufferedWriter。主要使用 BufferedWriter类中的 write() 类进行输出。会抛出异常。 当数据量大的时候一定要使用这个类进行输出。输出后并不会自动换行。

需要注意的是 write() 不能直接输出int类型, 因为write(int a) 会输出其对应的ASCii码的字符 ,比如输出 65 会

显示 A。

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.Scanner;

public class demo03 {
    public static void main(String[] args)throws Exception {
        Scanner cin = new Scanner(System.in);
        BufferedWriter cout = new BufferedWriter(new OutputStreamWriter(System.out));
        int a1=66;
        char a2='6';
        String a3="66";
        cout.write(a1);
        cout.write("\n");
        cout.write(a2);
        cout.write("\n");
        cout.write(a3);
        cout.write("\n");
        //先使用flush强制把数据输出,缓冲区清空后后在关闭
        cout.flush();
        cin.close();
    }
}

所以当需要输出一个int类型的变量时, 可以用Integer.toString(int a)方法 将其变为字符串形式输出。或者使用 + 拼接一个字符串,这样 参数整体就是一个字符串了,比如加一个换行符。

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.Scanner;

public class demo04 {
    public static void main(String[] args) throws Exception{
/*当需要输出一个int类型的变量时,使用Integer.toString(int a)
* 将其变成字符串形式输出 或者使用+拼接一个字符串 这样整体就是一个字符串了 比如加一个换行符
* 
*
* */
        Scanner cin = new Scanner(System.in);
        BufferedWriter cout = new BufferedWriter(new OutputStreamWriter(System.out));
        int a1=66;
        //+拼接字符串
        cout.write(a1+"\n");
        //Integer.toString
        cout.write(Integer.toString(a1));
        //固定格式 先强制输出数据,清空缓冲区,在关闭
        cout.flush();
        cin.close();

    }
}

BufferedWriter常用方法:

方法描述
void write(int c)输出整数对应的ASCII码字符
void write(String s,int off,int len)输出在字符串s中,从下标为off开始,长度为len的子串
void write(char[] cbuf,int off,int len)类似同上描述。
void write(char[] cbuf)输出字符数组中的全部字符
void write(String str)输出字符串

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.Scanner;

public class demo05 {
    public static void main(String[] args)throws Exception {
        /*BufferedWriter常用方法*/
        Scanner cin = new Scanner(System.in);
        BufferedWriter cout = new BufferedWriter(new OutputStreamWriter(System.out));
//        int a=98;
//        String s="HelloWorld!";
//        cout.write(a+"\n");  //输出对应的ASC||码字符
//        cout.write(s,2,6); //输出在字符串s,从下标off开始,长度为len的子串
        char[] c=new char[]{'2','s','c','o'};
        cout.write(c,1,3);  //同上
        cout.write(c);  //char[] c 数组
        String s="HelloWorld!"; //String s 字符串
        cout.write(s);
        cout.flush();
        cin.close();
    }
}

PrintWriter输出

可以看出来,其实和BufferedWriter的定义声明差不多,所以,可以参考BufferedWriter的用法。不同的是,PrintWriter还可以用println输出。

//所需要的包
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class demo06 {
    public static void main(String[] args) {
        /*PrintWriter的使用*/
        /*输出分为两步:
        * 1. 先通过print()或者println()方法把需要输出的内容放入缓冲区
        * 2.然后通过flush()将缓冲区的内容输出到控制台
        * */
        //IO流包装直接套用
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
        out.println("Hello World!");   //输出内容
        out.println("nihao world!");
        out.println("hi myworld!");
        out.flush(); //刷新输出缓冲区,把缓冲区的内容输出到控制台,尝试将这条语句写上和注释掉的效果
        //有开就有关
        out.close();



    }
}

2.2.2输出

BufferedReader

常用方法:

方法描述
int read()读取单个字符.可读入空格回车
int read(char[] cbuf,int off,int len)将字符读入数组的指定位置
int read(char[] cbuf)读入字符数组
String readLine()读入一行数据.可读入空格

需要注意的是 在windows中按一下回车键 一共有两个字符 “\n\r” 而read()只能读取一个字符,所以如要要用read来达到吸收回车的目的,需要用两个read(); 如果用readLine()的话会将”\n\r”全部吸收 , 所以只需要一个readLine()来吸收回车。

import java.io.*;

public class demo07 {
    public static void main(String[] args) throws Exception {
        /*BufferedReader的使用和可以调用的方法
        *
        *
        * */
        BufferedWriter cout = new BufferedWriter(new OutputStreamWriter(System.out));
        BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
        int a= cin.read(); //读取单个字符
        int b= cin.read(); //可读入空格回车
        int x=cin.read();
        String s=cin.readLine();

        cout.write(a+"\n");
        cout.write(b+"\n");
        cout.write(x+"\n");
        cout.write(s+"\n");
        cout.flush();
        cout.close();
        cin.close();
    }
}

StreamTokenizer输入

StreamTokenizer只能接收数字或字母,如果输入除空格和回车以外的字符(如:!@#$%^&*()[]{})无法识别,会显示null。

StreamTokenizer可以获取输入流并根据空格和回车分割成Token(标记),用nextToken方法读取下一个标记 。

如果标记是字符串,用st.sval获取标记,如果是数字用st.nval获取标记,st.navl是double类型。

1.输入数字(nval)


import java.io.*;

public class demo08 {
    public static void main(String[] args) {
        //输入数字
        //IO流包装
        StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
        int n =(int)in.nval;  //获取整数
        out.println(n);
        String str=in.sval;
        out.println(str);
        out.flush();
        out.close();

    }
}

2.输入字符串(sval)

package com.zxl.fastinput;

import java.io.*;

public class demo09 {
    public static void main(String[] args) throws Exception {
        StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
        while (in.nextToken() != StreamTokenizer.TT_EOF) {
            int n = (int) in.nval;
            in.nextToken();
            int m=(int)in.nval;
            out.println(n+" "+m);
            out.flush();
            out.close();
        }
    }
}

总结

以上仅仅代表个人意见,具体情况,根据实际情况而定。

对于输入和输出,不同的类型用不同的输入。

输入

读数字:StreamTokenizer(字符串也可以)。但是需要注意的是,不能用来读取纯数字字符串。但也有解决办法。原因点击可见

读字符(串):BufferedReader

两种非必要最好不要混用。

输出

反正自己觉得PrintWriter是比较方便的。根据自己而定。

提供一个自己的模板。

基本模板

package com.zxl.fastinput;
import java.io.*;
public class moban {
    public static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    public static BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
    public static StreamTokenizer cin = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
    public static PrintWriter cout = new PrintWriter(new OutputStreamWriter(System.out));

    public static void main(String[] args) throws Exception {
        int n = nextInt();
        long m = nextLong();
        double d = nextDouble();
        cout.println(n);
        cout.flush();
        cout.println(m);
        cout.flush();
        cout.println(d);
        cout.flush();

        closeAll();
    }
    public static void cinInit(){
        cin.wordChars('a', 'z');
        cin.wordChars('A', 'Z');
        cin.wordChars(128 + 32, 255);
        cin.whitespaceChars(0, ' ');
        cin.commentChar('/');
        cin.quoteChar('"');
        cin.quoteChar('\'');
        cin.parseNumbers(); //还原默认数字
    }

    public static int nextInt() throws Exception{
        cin.nextToken();
        return (int) cin.nval;
    }
    public static long nextLong() throws Exception{
        cin.nextToken();
        return (long) cin.nval;
    }
    public static double nextDouble() throws Exception{
        cin.nextToken();
        return cin.nval;
    }
    public static String nextString() throws Exception{
        cin.nextToken();
        return cin.sval;
    }
    public static void closeAll() throws Exception {
        cout.close();
        in.close();
        out.close();
    }
}

  • 31
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值