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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我为你着迷 金牌黑马   /  2014-12-7 17:32  /  1597 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 我为你着迷 于 2014-12-7 17:34 编辑
  1. import java.io.*;
  2. import java.util.*;
  3. class Student implements Comparable<Student>
  4. {
  5.         private String name;
  6.         private int ma,cn,en;
  7.         private int sum;
  8.         
  9.         Student(String name,int ma,int cn,int en)
  10.         {
  11.                 this.name=name;
  12.                 this.ma=ma;
  13.                 this.cn=cn;
  14.                 this.en=en;
  15.                 sum=ma+cn+en;
  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.         
  25.         public String getName()
  26.         {
  27.                 return name;
  28.          }
  29.   public int getSum()
  30.   {
  31.           return sum;
  32.   }
  33.   public int haskCode()
  34.   {
  35.           return name.hashCode()+sum*78;
  36.   }
  37.   public boolean equals(Object obj)
  38.   {
  39.           if(!(obj instanceof Student))
  40.                 throw new ClassCastException("类型不匹配");
  41.           Student s=(Student)obj;
  42.          
  43.           return this.name.equals(s.name)&&this.sum==s.sum;
  44.   }
  45.   
  46.   public String toString()
  47.   {
  48.           return "student["+name+","+ma+","+cn+","+en+"]";
  49.    }
  50. }

  51. class StudentInfoTool
  52. {
  53.         public static Set<Student> getStudents() throws IOException
  54.         {
  55.                 BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
  56.                
  57.                 String line=null;
  58.                 Set<Student> stus=new TreeSet<Student>();
  59.                 while((line=bufr.readLine())!=null)
  60.                 {
  61.                         if("over".equals(line))
  62.                                         break;
  63.                
  64.                         String[] info=line.split(",");
  65.                         
  66.                         Student stu=new Student(info[0],Integer.parseInt(info[1]),Integer.parseInt(info[2]),Integer.parseInt(info[3]));
  67.                         
  68.                         stus.add(stu);
  69.                         
  70.                 }
  71.                 bufr.close();
  72.                 return stus;
  73.                
  74.         }

  75.         public static void write2File(Set<Student> stus) throws IOException
  76.         {
  77.                 BufferedWriter bufw=new BufferedWriter(new FileWriter("stuinfo.txt"));
  78.                
  79.                 for(Student stu:stus)
  80.                 {
  81.                         bufw.write(stu.toString()+"\t");
  82.                         bufw.write(stu.getSum()+"");
  83.                         bufw.newLine();
  84.                         bufw.flush();
  85.                 }
  86.                 bufw.close();
  87.         }
  88. }

  89. class StudentInfoTest
  90. {
  91.         public static void main(String[] args) throws IOException
  92.         {
  93.                         Set<Student>stus=StudentInfoTool.getStudents();
  94.                         
  95.                         StudentInfoTool.write2File(stus);
  96.         }
  97. }

复制代码

大家好  我这个为什么最后打印出是这样的呀 看着这么别扭  程序和视频是一样的。数字不是对齐的  你们是对齐的吗?
student[wangwu,10,20,10] 40
student[zhouliu,29,30,90] 149
student[zhangsan,40,20,90] 150
student[zhouqi,50,50,50] 150
student[lisi,90,90,90] 270

6 个回复

倒序浏览
多加一个tab试试
回复 使用道具 举报
这个貌似没什么办法  我记得原来我也纠结了很久   
C语言就有这种格式对齐的  java好像真的没有   
只有你自己控制输入的名字的长短在一个8位以内用制表符就能够勉强对齐

评分

参与人数 2技术分 +1 黑马币 +10 收起 理由
我为你着迷 + 10 赞一个!
李家汉子初养成 + 1

查看全部评分

回复 使用道具 举报
默默丶 发表于 2014-12-7 21:16
这个貌似没什么办法  我记得原来我也纠结了很久   
C语言就有这种格式对齐的  java好像真的没有   
只有你 ...

可以用String.format格式化输出。试一下
回复 使用道具 举报
之前也出现过。用String.format可以解决。比如,String.format("%-10s","姓名" ),就是靠左对齐,占用10个空格的空间。除了名字之外的,可以用制表符

评分

参与人数 1黑马币 +10 收起 理由
我为你着迷 + 10 谢谢

查看全部评分

回复 使用道具 举报
杨佳名 发表于 2014-12-7 23:50
可以用String.format格式化输出。试一下

format 我也试过  就是弄了好多没弄出来   
把C语言的东西弄过来不好使
回复 使用道具 举报
:)学习中
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马