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

时间:2025-04-18 07:48:17

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

一.用BufferedReader进行输入

提供的方法有:

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

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

import ;
import ;
import ;

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

throws IOException

1. 输入字符串

import ;
import ;
import ;

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

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

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

2.输入数字或数组 

import ;
import ;
import ;

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

3.输入单链表

import ;
import ;
import ;

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

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

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

4.输入二叉树

import ;
import ;
import ;

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

        //用数组按层级遍历顺序存储二叉树的节点
        TreeNode[] tree = new TreeNode[];
        for(int i = 0; i < ; i++){
            int val_i = (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 < ; 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) {
             = val;
        }
    }
}

二.用Scanner进行输入

提供的方法有: 

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

1.输入数字 

import ;

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

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

        //输出
        (sum);
    }
}

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

import ;

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

        }
    }
}

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

总结:

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