BufferedReader类
BufferedReader类从字符输入流中带缓存功能的读取字符 提高了读取的速度,快读
BufferedReader类的快读是与其缓存流相关
BufferedReader类常用readLine() 按行读取字符串
案例分析
1.题目:错误票据
2.最终代码
3.分析
第一行
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));是快读
其中System.in: 这是Java标准库中的一个预定义输入流(键盘录入),InputStreamReader则是起到把字节流转化为字符流的作用,BufferedReader
与InputStreamReader
一起使用可以从输入流中更高效地读取数据。
第十行
int n=Integer.parseInt(in.readLine());
in.readLine()读行获取键盘录入的字符串,用Integer.parseInt()来完成将字符串转化成int类型并赋值给n
第十三到十八行
是一个循环嵌套,设定i<n便是设定了输出为n行,
核心语句为:String[]m=in.readLine().split(" ");
将in.readLine()读取的字符串根据split(" ")按空格分割成多个字符串放入String[]m
再用一个循环将每一次得到的String[]m的每一项存入集合list
通过Collections.sort(list);将所有数据排序
二十一行到三十一行
int m=0;//断号 int x=0;//重号 for(int i=0;i<list.size()-1;i++){ if((list.get(i+1)-list.get(i))==0){ x=list.get(i+1)+1; }else if((list.get(i+1)-list.get(i))==2){ m=list.get(i+1); } } System.out.println(m+" "+x);
上面最难的部分已经解决,只剩下简单的筛选,通用选用for循环逐项比较前后两项
如果相等便是重号,如果大减小等于2那便是断号,之后再相应的输出就好
总结
这道题的收获主要在对于BufferedReader类的了解从无到有,掌握了更快的一种键盘录入的方式,使系统跑的更快。
在我的理解里,BufferedReader in=new BufferedReader(new InputStreamReader(System.in));就是导包,创建的一个BufferedReader的对象,后面new InputStreamReader(System.in)则是创建inputStreamreader对象将字节流转化为字符流,System.in则是键盘输入。那么就好理解了,可以直接将in.readLine()当作键盘录入用就好。
还有一点就是将字符串转化为int类型,之前一直不会,只会用toString将其他类型转为字符串,而这次可以用Integer.parseInt();将字符串转化为int类型,并且更深的了解了int和integer的关系
这次案例所用到的键盘录入、分行、切割、排序都是之前用的少或者没用用过的,这次训练更好的掌握了相关的方法以及加深了对这些代码的理解