A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈云阳 高级黑马   /  2014-7-18 23:57  /  1334 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.*;
  2. import java.io.*;

  3. class Student implements Comparable<Student>
  4. {
  5.         private String name;//名字
  6.         private int ma,cn,en;//语数英
  7.         private int sum;//成绩总和

  8.         Student(String name,int ma,int cn,int en)
  9.         {
  10.                 this.name = name;
  11.                 this.ma = ma;
  12.                 this.cn = cn;
  13.                 this.en = en;
  14.                 sum = ma + cn + en;
  15.         }
  16.        
  17.         public int compareTo(Student s)
  18.         {
  19.                 int num = new Integer(this.sum).compareTo(new Integer(s.sum));//根据总成绩升序排序
  20.                 if(num==0)//如果总成绩相等,再按名字排序
  21.                         return this.name.compareTo(s.name);//按字符大小比较名字
  22.                 return num;
  23.         }

  24.         public String getName()//返回名字
  25.         {
  26.                 return name;
  27.         }

  28.         public int getSum()//返回成绩总和
  29.         {
  30.                 return sum;
  31.         }

  32.         public int hasCode()
  33.         {
  34.                 return name.hashCode()+sum*78;
  35.         }

  36.         public boolean equals(Object obj)//判断姓名,成绩是否相等
  37.         {
  38.                 if(!(obj instanceof Student))
  39.                         throw new ClassCastException("类型不匹配");
  40.                 Student s = (Student)obj;

  41.                 return this.name.equals(s.name) && this.sum == s.sum;
  42.         }

  43.         public String toString()//返回姓名 各科成绩
  44.         {
  45.                 return "student["+name+","+ma+","+cn+","+en+"]";
  46.         }
  47. }

  48. class StudentInfoTool
  49. {
  50.         public static Set<Student> getStudent()throws IOException//用默认比较方法
  51.         {
  52.                 return getStudent(null);
  53.         }
  54.         public static Set<Student> getStudent(Comparator<Student> cmp)throws IOException//用指定比较器
  55.         {
  56.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));//键盘录入
  57.                
  58.                 String line = null;
  59.                
  60.                 Set<Student> stus = null;
  61.                 if(cmp==null)
  62.                         stus = new TreeSet<Student>();
  63.                 else
  64.                         stus = new TreeSet<Student>(cmp);

  65.                 while((line=bufr.readLine())!=null)//一次读取一行键盘录入
  66.                 {
  67.                         if("over".equals(line))//over结束程序
  68.                                 break;
  69.                         String[] info = line.split(",");//将键盘录入字符串,按,分割存入数组中

  70.                         Student stu = new Student(info[0],Integer.parseInt(info[1]),
  71.                                                                                         Integer.parseInt(info[2]),
  72.                                                                                         Integer.parseInt(info[3]));

  73.                         stus.add(stu);//将学生信息存入Set集合
  74.                 }
  75.                 bufr.close();

  76.                 return stus;
  77.         }

  78.         public static void write2File(Set<Student> stus)throws IOException
  79.         {
  80.                 BufferedWriter bufw = new BufferedWriter(new FileWriter("stuinfo.txt"));//创建文本文件
  81.                
  82.                 for (Student stu : stus)//遍历集合
  83.                 {
  84.                         bufw.write(stu.toString()+"\t");//将集合中返回的学生姓名,各科成绩存到输出流缓冲区   //tab
  85.                         bufw.write(stu.getSum()+"");//将总成绩存入输出流缓冲区
  86.                         bufw.newLine();//换行
  87.                         bufw.flush();//将缓冲区数据刷到文本文件中
  88.                 }

  89.                 bufw.close();
  90.         }
  91. }
  92. class StudentInfoTest
  93. {
  94.         public static void main(String[] args)throws IOException
  95.         {
  96.                 Comparator<Student> cmp = Collections.reverseOrder();//返回一个比较器,该比较器强行逆转Comparable比较对象顺序

  97.                 Set<Student> stus = StudentInfoTool.getStudent(cmp);//将学生存入集合中并将集合对象返回

  98.                 StudentInfoTool.write2File(stus);
  99.         }
  100. }
复制代码
为什么我设置的tab键有一两行会不起作用

QQ图片20140718235424.jpg (94.76 KB, 下载次数: 28)

QQ图片20140718235424.jpg

QQ图片20140718235432.jpg (81.25 KB, 下载次数: 26)

QQ图片20140718235432.jpg

10 个回复

倒序浏览
tab 是制表符,作用是把光标定位到下一个制表位,第一行长度短,下一个制表位就在那各地方
回复 使用道具 举报
icris 发表于 2014-7-19 00:00
tab 是制表符,作用是把光标定位到下一个制表位,第一行长度短,下一个制表位就在那各地方
...

为什么会不起作用
回复 使用道具 举报
陈云阳 发表于 2014-7-19 00:02
为什么会不起作用

起作用了啊…您看第一个图那两个在前面的不也对齐了吗…
回复 使用道具 举报
icris 发表于 2014-7-19 00:04
起作用了啊…您看第一个图那两个在前面的不也对齐了吗…

不对啊,对其应该全部对其啊,第一张图,182跟177没跟其他行对齐,第二张图,第一行 270 没跟其他行对其,原本5行应该全部对其的
回复 使用道具 举报
陈云阳 发表于 2014-7-19 00:08
不对啊,对其应该全部对其啊,第一张图,182跟177没跟其他行对齐,第二张图,第一行 270 没跟其他行对其 ...

tab 是制表符,作用是把光标定位到下一个制表位,一般情况制表位是 8*n+1 ,tab 的作用不是对齐…
第一张图的二三行长度短,其他行定位到 8*k+1 ,这两行定位到 8*(k-1) + 1 ,你看这两行的数不是对得很齐吗,只是比其他行提前一个制表位而已
回复 使用道具 举报
icris 中级黑马 2014-7-19 00:17:54
7#
陈云阳 发表于 2014-7-19 00:08
不对啊,对其应该全部对其啊,第一张图,182跟177没跟其他行对齐,第二张图,第一行 270 没跟其他行对其 ...

复制百度百科的举例:
当光标在第1个字符,按下制表键,它会跳到第9个字符处;——8*1+1
当光标在第4个字符,按下制表键,它会跳到第9个字符处;——8*1+1
当光标在第7个字符,按下制表键,它会跳到第9个字符处;——8*1+1
当光标在第9个字符,按下制表键,它会跳到第17个字符处;——8*2+1
当光标在第12个字符,按下制表键,它会跳到第17个字符处;——8*2+1
当光标在第16个字符,按下制表键,它会跳到第17个字符处;——8*2+1
当光标在第18个字符,按下制表键,它会跳到第25个字符处;——8*3+1
……
回复 使用道具 举报
icris 发表于 2014-7-19 00:16
tab 是制表符,作用是把光标定位到下一个制表位,一般情况制表位是 8*n+1 ,tab 的作用不是对齐…
第一张 ...

哦哦,那TAB是不是只有在控制台才能有对齐效果,文本文件中就没有咯,
回复 使用道具 举报
icris 中级黑马 2014-7-19 00:31:38
9#
陈云阳 发表于 2014-7-19 00:22
哦哦,那TAB是不是只有在控制台才能有对齐效果,文本文件中就没有咯,

我觉得如果你再试试控制台输出,短的几行也不会对齐…
可以试试判断字符串长度,长度不够就加两个 \t 就能对齐了
回复 使用道具 举报
icris 发表于 2014-7-19 00:17
复制百度百科的举例:
当光标在第1个字符,按下制表键,它会跳到第9个字符处;——8*1+1
当光标在第4个字 ...

学习了,原来是这样!
回复 使用道具 举报
icris 发表于 2014-7-19 00:31
我觉得如果你再试试控制台输出,短的几行也不会对齐…
可以试试判断字符串长度,长度不够就加两个 \t 就 ...

还真是,控制台也是这种输出,难道我以前出现幻觉了,:'(我一直以为tab是对齐用的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马