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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天蝎降降温 中级黑马   /  2014-10-17 17:15  /  1594 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

键盘录入学生的语文,数学,英语成绩。按照总分排序从高到下写入文本中。


11 个回复

倒序浏览
采用TreeMap集合。里面存储键为学生对象,值为总分。
回复 使用道具 举报
采用TreeMap集合。里面存储键为学生对象,值为总分。学生对象要实现comparable接口。
回复 使用道具 举报
伸手党,视频里貌似讲过这个吧 = =
回复 使用道具 举报 2 0
最近一直在敲博客,实在不想敲代码了。。。
回复 使用道具 举报
视频要认真看,代码要认真敲,懂
回复 使用道具 举报
仅供参考,注释懒的写了
  1. import java.io.*;
  2. import java.util.*;
  3. class Student implements Comparable
  4. {
  5.         private String name;
  6.         private int math;
  7.         private int cn;
  8.         private int en;
  9.         private int score;
  10.         Student(String name,int math,int cn,int en)
  11.         {
  12.                 this.name = name;
  13.                 this.math = math;
  14.                 this.cn = cn;
  15.                 this.en = en;
  16.         }

  17.         public int getScore()
  18.         {
  19.                 return math + cn + en ;
  20.         }

  21.         public String toString()
  22.         {
  23.                 return name+"\t"+math+"\t"+cn+"\t"+en;
  24.         }
  25.        
  26.         public boolean equals(Object obj)
  27.         {
  28.                 if(!(obj instanceof Student))
  29.                         throw new ClassCastException("不是学生对象");
  30.                 Student s = (Student)obj;
  31.                 return s.name.equals(this.name)&&s.getScore()==this.getScore();
  32.         }
  33.         public int compareTo(Object obj)
  34.         {
  35.                 Student s = (Student)obj;
  36.                 int num = new Integer(s.getScore()).compareTo(new Integer(this.getScore()));
  37.                 if (num==0)
  38.                         return this.name.compareTo(s.name);
  39.                 return num;
  40.         }
  41. }

  42. class Stu
  43. {
  44.         public static void main(String[] args)
  45.         {
  46.                 inputInfo();
  47.         }

  48.         public static void inputInfo()
  49.         {
  50.                 TreeSet<Student> ts = new TreeSet<Student>();
  51.                 BufferedReader bufr = null;
  52.                 BufferedWriter bufw = null;
  53.                 try
  54.                 {
  55.                         bufr = new BufferedReader(new InputStreamReader(System.in));
  56.                         bufw = new BufferedWriter(new FileWriter("stud.txt"));

  57.                         String len = null;
  58.                         while ((len=bufr.readLine())!=null)
  59.                         {
  60.                                 if("over".equals(len))
  61.                                         break;
  62.                                 String[] s = len.split(",");
  63.                                 ts.add(new Student(s[0],Integer.parseInt(s[1]),Integer.parseInt(s[2]),Integer.parseInt(s[3])));
  64.                         }

  65.                         Iterator<Student> it = ts.iterator();

  66.                         int score = 0;
  67.                         bufw.write("姓名\t数学\t语文\t英语\t总分");
  68.                         bufw.newLine();
  69.                         while (it.hasNext())
  70.                         {
  71.                                 Student s = it.next();
  72.                                 score = s.getScore();
  73.                                 bufw.write(s.toString()+"\t"+score);
  74.                                 bufw.newLine();
  75.                         }
  76.                 }
  77.                 catch (IOException e)
  78.                 {
  79.                         throw new RuntimeException("录入失败!");
  80.                 }
  81.                 finally
  82.                 {
  83.                         try
  84.                         {
  85.                                 if(bufw!=null)
  86.                                         bufw.close();
  87.                         }
  88.                         catch (IOException e)
  89.                         {
  90.                                 throw new RuntimeException("关闭写入流失败!");
  91.                         }

  92.                         try
  93.                         {
  94.                                 if(bufr!=null)
  95.                                         bufr.close();
  96.                         }
  97.                         catch (IOException e)
  98.                         {
  99.                                 throw new RuntimeException("关闭读取流失败!");
  100.                         }
  101.                 }
  102.         }
  103. }

复制代码

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
Franklin + 2 赞一个!
杨佳名 + 1 注意休息

查看全部评分

回复 使用道具 举报
  1. 这是我写的,你可以参考一下
复制代码


回复 使用道具 举报
额,咋没了呢
  1. package com.itheima;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.io.OutputStreamWriter;
  8. import java.util.ArrayList;

  9. public class Text4 {

  10.         /**
  11.          * 第4题 有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,
  12.          * 输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到
  13.          * 一个名称"stu.txt"文件中。要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
  14.          * @param args
  15.          * @throws IOException
  16.          */
  17.         public static void main(String[] args) throws IOException {
  18.                 //创建ArrayList对象,用来存放学生对象
  19.                 ArrayList<Student> list = new ArrayList<Student>();
  20.                 list = getStudentsList();
  21.                 //创建输出缓冲区,用来将得到的学生信息写入stu.txt文件中
  22.                 BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("stu.txt")));
  23.                 for(int i = 0; i < list.size(); i ++) {
  24.                         String str = list.get(i).toString();
  25.                         bufw.write(str);
  26.                         bufw.newLine();
  27.                         bufw.flush();
  28.                 }
  29.                 bufw.close();
  30.         }
  31.         //定义方法,对存放学生的ArrayList按照学生总成绩排序
  32.         public static void sort(ArrayList<Student> list) {
  33.                 Student temp = null;
  34.                 for(int i = 0; i < list.size()-1; i ++) {
  35.                         for(int j = i+1; j < list.size(); j ++) {
  36.                                 if(list.get(i).getSum() < list.get(j).getSum()) {
  37.                                         temp = list.get(i);
  38.                                         list.set(i, list.get(j));
  39.                                         list.set(j, temp);
  40.                                 }
  41.                                 System.out.println(""+i+j);
  42.                         }
  43.                 }
  44.         }
  45.         //定义方法,将键盘输入的学生对象存储到ArrayList列表中,并返回该列表
  46.         public static ArrayList<Student> getStudentsList() throws IOException {
  47.                 System.out.println("请按照格式输入学生信息:注意学生成绩精确到小数点后一位");
  48.                 System.out.println("格式:学生名,语文成绩,数学成绩,英语成绩;其中,为英文,");
  49.                 //创建ArrayList对象,用来存放学生对象
  50.                 ArrayList<Student> list = new ArrayList<Student>();
  51.                 //创建输入缓冲区,用来就收键盘输入的学生信息
  52.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  53.                 String line = null;
  54.                 //定义正则规则,用来限制输入的学生信息的格式
  55.                 String str = "((\\w+)|([\\u4e00-\\u9fa5]+))(,((\\d{1,3})|(\\d{1,2}\\.\\d{1}))){3}";
  56.                 while((line = bufr.readLine()) != null) {
  57.                         if("over".equals(line)) {
  58.                                 break;
  59.                         }
  60.                         if(!line.matches(str)) {
  61.                                 System.out.println("对不起,您输入的格式不正确,请重新输入!");
  62.                         }else {
  63.                                 //通过split方法,将学生的信息提取处理
  64.                                 String name = line.split(",")[0];
  65.                                 double chineseScore = Double.parseDouble(line.split(",")[1]);
  66.                                 double mathsScore = Double.parseDouble(line.split(",")[2]);
  67.                                 double englishScore = Double.parseDouble(line.split(",")[3]);
  68.                                 //创建与输入信息对应的学生对象
  69.                                 Student stu = new Student(name, chineseScore, mathsScore, englishScore);
  70.                                 //将学生对象添加到list中
  71.                                 list.add(stu);
  72.                         }
  73.                 }
  74.                 bufr.close();
  75.                 sort(list);//对list按照学生成绩进行排序
  76.                 return list;
  77.         }
  78. }
  79. /*
  80. * 定义学生类
  81. */
  82. class Student {
  83.         //定义学生类属性
  84.         private String name;//学生姓名
  85.         private double chineseScore;//语文成绩
  86.         private double mathsScore;//数学成绩
  87.         private double englishScore;//英语成绩
  88.         //定义构造函数
  89.         public Student(String name, double chineseScore, double mathsScore,
  90.                         double englishScore) {
  91.                 this.name = name;
  92.                 this.chineseScore = chineseScore;
  93.                 this.mathsScore = mathsScore;
  94.                 this.englishScore = englishScore;
  95.         }
  96.         //定义对学生类属性进行操作的方法
  97.         public String getName() {
  98.                 return name;
  99.         }
  100.         public void setName(String name) {
  101.                 this.name = name;
  102.         }
  103.         public double getChineseScore() {
  104.                 return chineseScore;
  105.         }
  106.         public void setChineseScore(int chineseScore) {
  107.                 this.chineseScore = chineseScore;
  108.         }
  109.         public double getMathsScore() {
  110.                 return mathsScore;
  111.         }
  112.         public void setMathsScore(int mathsScore) {
  113.                 this.mathsScore = mathsScore;
  114.         }
  115.         public double getEnglishScore() {
  116.                 return englishScore;
  117.         }
  118.         public void setEnglishScore(int englishScore) {
  119.                 this.englishScore = englishScore;
  120.         }
  121.         //定义方法,获得该学生的总成绩。
  122.         public double getSum() {
  123.                 return chineseScore + mathsScore + englishScore;
  124.         }
  125.         //用重写的方式,自定义toString方法
  126.         @Override
  127.         public String toString() {
  128.                 return name + ", \t" + chineseScore + ", \t" + mathsScore + ", \t" + englishScore;
  129.         }
  130. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 下次可以考虑只给思路。

查看全部评分

回复 使用道具 举报
liu951753xz 发表于 2014-10-17 23:40
视频要认真看,代码要认真敲,懂

问你一个问题,继承Thread类,与是先Runnablejie接口哪个更好,占用资源最少?
回复 使用道具 举报
liu951753xz 发表于 2014-10-17 23:40
视频要认真看,代码要认真敲,懂

还有一个也不懂,这个也不是敲代码的问题,线程同步时,比如转账操作,为什么两个线程操作时会产生钱总数的误差错误,比如转出两百,转入两百,变化的仍是两百,最后总数却有误差,明明总数是一个变量,只是存的时候被中断了,却产生了误差,意思是操作的是一个变量,怎么会这样,求指教,谢谢。ps:这个不是伸手党,只是个疑惑而已。
回复 使用道具 举报
学习一下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马