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;
}
}