PTA 天梯赛L1-005 考试座位号 使用Java实现 适合小白

ps:内容较多,但绝对有用,慢慢享用~

原题:

每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。

输入格式:

输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号。其中准考证号由 16 位数字组成,座位从 1 到 N 编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。

考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔。

输出格式:

对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。

输入样例:

4
3310120150912233 2 4
3310120150912119 4 1
3310120150912126 1 3
3310120150912002 3 2
2
3 4

输出样例:

3310120150912002 2
3310120150912119 1

 

 

解题思路:

(1)创建一个Student类,包含准考证号和考试座位号两个属性

(2)创建一个BufferedReader字符输入流对象,用来接收数据,此处不使用Scanner是因为相比BufferedReader,Scanner的读取速度太慢,而且不要两者混用否则会出问题。

拓展:Buffer,缓冲,顾名思义,带有Buffered的就叫缓冲流,缓冲流就是先把数据缓存到内存中,再进行读取。如果没有缓冲,则每次调用 read() 或 readLine()都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。

关于IO流,这里有一幅思维导图可供大家参考:(该图也是我从别的大佬手里拿到的,需要的可以私聊我)

(3)实例化Student类对象数组

(4)每次输入的信息中按照准考证号、试机座位号、考试座位号分别输入

(5)使用split()方法判断所输入的信息,按照空格标记符分开,试机号作为数组下标,分别把准考证号和考试座位号封装起来

(6)接收所要查询的试机座位号个数和相应的试机座位号,并存放到query数组中

(7)根据输入的试机座位号,输出相应的考试座位号

split()函数 
作用:返回一个下标从零开始的一维数组

示例:
Stringstr=“123¥45¥67¥8”;
strs[]=Stringstr.split("¥");
strs[0]=123;
strs[1]=45;
strs[2]=67;
strs[3]=8;

       Integer.parseInt()是把()里的内容转换成整数。Integer.parseInt(String)遇到一些不能被转换为整型的字符时,会抛出异常。Integer.parseInt(String)的作用就是将答String字符类型数据转换为Integer整型数据。

代码:

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main{
    public static void main (String args[])throws IOException{
        //创建缓冲字符输入流
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        Student[] stu = new Student[1005];
        //为保证输入的是整数,使用parseInt方法进行强制类型转换
        int n = Integer.parseInt(reader.readLine());

        while(n-- >0){
            //将输入的每一行信息转换成数组
            String[] source = reader.readLine().split(" ");

            //数组的第一位即为准考证号
            String no = source[0];

            //数组的第2、3位分别为试机座位号和考试座位号
            int prenum = Integer.parseInt(source[1]);
            int num = Integer.parseInt(source[2]);

            将每位学生的准考证号和考试座位号封装起来
            stu[prenum] = new Student(no,num);
        }

        n = Integer.parseInt(reader.readLine());//所要查询学生的人数n
        String[] query = reader.readLine().split(" ");//n个试机座位号存放在query数组中
        for(int i = 0; i < query.length; i++)
        {
            int a = Integer.parseInt(query[i]);
            System.out.print(stu[a].ID + " " + stu[a].kaoshi);
            if(n > 0)
                System.out.println();
        }
        reader.close();
    }
}
    //定义Student类
    class Student{
    String ID;
    int kaoshi;
    public Student(String no, int num) {
            super();
            this.ID = no;
            this.kaoshi = num;
        }
}

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南桃shine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值