牛客网笔试系统ACM模式下的程序输入格式总结

Java提供两种方式进行键盘的输入, BufferedReader 和 Scanner

一.用BufferedReader进行输入

提供的方法有:

  • readLine(); // 以enter为结束标志,读取一行数据,返回一个字符串,

注意点1:导入三个包(也可以直接import java.io.*; 美滋滋)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

注意点2:main方法要手动抛出IO异常 

throws IOException

1. 输入字符串

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
    //1.输入字符串
    public static void main(String[] args) throws IOException {
        //获取键盘一行的输入,以enter键为结束标志
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String s = reader.readLine();
        //s是最终得到的输入字符串
    }
}

补充:如果不知道输入有多少行,需要加一条判断语句

String str;
while(!(str = reader.readLine()).equals("")){
    //如果不为空,才进行下述操作
    ......
}

2.输入数字或数组 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
    //2.输入数字或数组
    public static void main(String[] args) throws IOException {
        //获取键盘一行的输入,以enter键为结束标志
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String[] s = reader.readLine().split(" "); //用空格分割,也可以用逗号分割
        //转化为int数组
        int[] arr = new int[s.length];
        for(int i = 0; i < s.length; i++){
            arr[i] = Integer.parseInt(s[i]);
        }
        //arr是最终得到的int型数组
    }
}

3.输入单链表

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
    //3.输入链表
    public static void main(String[] args) throws IOException {
        //获取键盘一行的输入,以enter键为结束标志
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String[] s = reader.readLine().split(" "); //用空格分割,也可以用逗号分割

        //创建链表,并赋值
        LinkNode head = new LinkNode(0);
        LinkNode index = head;
        for(int i = 0; i < s.length; i++){
            int val_i = Integer.parseInt(s[i]);
            index.next = new LinkNode(val_i);
            index = index.next;
        }
        index.next = null;
        head = head.next;
        //head是最终得到的链表头节点
    }

    //辅助类:构建一个节点类,用于链表构建
    static class LinkNode {
        int val;
        LinkNode next;
        public LinkNode(int val){
            this.val = val;
        }
    }
}

4.输入二叉树

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
    //4.输入二叉树
    public static void main(String[] args) throws IOException {
        //获取键盘一行的输入,以enter键为结束标志
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String[] s = reader.readLine().split(" "); //用空格分割,也可以用逗号分割

        //用数组按层级遍历顺序存储二叉树的节点
        TreeNode[] tree = new TreeNode[s.length];
        for(int i = 0; i < tree.length; i++){
            int val_i = Integer.parseInt(s[i]);
            if(val_i == -1){
                tree[i] = null; //-1代表null
            }else{
                tree[i] = new TreeNode(val_i); 
            }
        }

        //再遍历一边,给左右子树赋值
        for(int i = 0; i * 2 + 2 < tree.length; i++){
            if(tree[i] != null){
                tree[i].left = tree[i * 2 + 1];
                tree[i].right = tree[i * 2 + 2];
            }
        }
        TreeNode root = tree[0];
        //root是最终得到的二叉树根节点
    }

    //辅助类:构造树需要的结点类
    static class TreeNode {
        int val;
        TreeNode left, right;
        public TreeNode(int val) {
            this.val = val;
        }
    }
}

二.用Scanner进行输入

提供的方法有: 

  • next(): // 读取一个字符串;
  • nextInt(): // 将读取的字符串转换成int类型的整数;
  • nextFloat(): // 将读取的字符串转换成float型;
  • nextBoolean(): //将读取的字符串转换成boolean型;
  • nextLine(): // 读取一整行数据,返回字符串

1.输入数字 

import java.util.Scanner;

public class Main{
    //1.输入数字
    public static void main(String[] args) {
        //获取键盘的单个字节输入,以空格,enter,tab为结束标志
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int b = scanner.nextInt();

        //求两数之和
        int sum = a + b;

        //输出
        System.out.print(sum);
    }
}

补充:如果不知道输入有多少行,需要加一条判断语句 

import java.util.Scanner;

public class Main{
    //1.输入数字
    public static void main(String[] args) {
        //获取键盘的单个字节输入,以空格,enter,tab为结束标志
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()){
            int a = scanner.nextInt();
            //输出
            System.out.print(a);

        }
    }
}

其他方法同上,可以自行实现...... 

总结:

根据观察,笔试过程中用Scanner方式处理输入的人相对比较多,所以就推荐大家优先使用Scanner吧。

  • 10
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值