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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

10黑马币
package com.itheima;

import static java.lang.Integer.parseInt;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeSet;

public class Test4 {

        /**
         * 有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,
         * 输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。
         * 要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
                    BufferedReader bd = new BufferedReader(new InputStreamReader(System.in));
                    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter("stu.txt"));
                    System.out.println("请输入学生成绩格式是:姓名,语文成绩,数学成绩,英语成绩");
                    //创建TreeSet集合对象,在TreeSet的构造函数中传入比较器,按照总分比较
                    TreeSet<Student> ts = new TreeSet<>(new Comparator<Student>() {

                            @Override
                            public int compare(Student s1, Student s2) {
                                    int num = s2.getSum() - s1.getSum();
                                    return num == 0 ? 2 : num;
                            }
                    });
                    //录入五个学生,所以以集合中的学生个数为判断条件,如果size是小于5就进行存储
                    while(ts.size() < 5) {
                            //将录入的字符串切割,用逗号切割,会返回一个字符串数组,将字符串数组中从二个元素转换成int数,
                            String line = bd.readLine();
                            String[] arr = line.split(",");
                            int chinese = Integer.parseInt(arr[1]);
                            int math = Integer.parseInt(arr[2]);
                            int english = Integer.parseInt(arr[3]);
                            //将转换后的结果封装成Student对象,将Student添加到TreeSet集合中
                            ts.add(new Student(arr[0], chinese, math, english));
                    }
                   
                    //遍历TreeSet集合打印每一个Student对象
                    for (Student s : ts) {
                            System.out.println(s);                            
                    }
        }
               
}
class Student {
        private String name;
        private int chinese;
        private int math;
        private int english;
        private int sum;
       
        public Student() {
                super();
               
        }
        public Student(String name, int chinese, int math, int english) {
                super();
                this.name = name;
                this.chinese = chinese;
                this.math = math;
                this.english = english;
                this.sum = this.chinese + this.math + this.english;
        }
        public int getSum() {
                return sum;
        }
       
        public String toString() {
                return name + "," + chinese + "," + math + "," + english + "," + sum;
        }
       
}


16 个回复

倒序浏览
还是不懂 还是不懂。。。。
回复 使用道具 举报
我也没看懂,表示过来学习一下~
回复 使用道具 举报
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.TreeSet;

public class Test
{

        /**
         * 有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,
         * 输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。
         * 要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
         *
         * @throws IOException
         */
        public static void main(String[] args) throws IOException
        {
                BufferedReader bd = new BufferedReader(new InputStreamReader(System.in));
                 BufferedWriter bw = new BufferedWriter(new FileWriter("stu.txt"));
                //System.out.println("请输入学生成绩格式是:姓名,语文成绩,数学成绩,英语成绩");
                // 创建TreeSet集合对象,在TreeSet的构造函数中传入比较器,按照总分比较
                TreeSet<Student> ts = new TreeSet<Student>();
                // 录入五个学生,所以以集合中的学生个数为判断条件,如果size是小于5就进行存储
                while (ts.size() < 5)
                {
                        // 将录入的字符串切割,用逗号切割,会返回一个字符串数组,将字符串数组中从二个元素转换成int数,
                        String line = bd.readLine();
                        String[] arr = line.split(",");
                        int chinese = Integer.parseInt(arr[1]);
                        int math = Integer.parseInt(arr[2]);
                        int english = Integer.parseInt(arr[3]);
                        // 将转换后的结果封装成Student对象,将Student添加到TreeSet集合中
                        ts.add(new Student(arr[0], chinese, math, english));
                }

                // 遍历TreeSet集合打印每一个Student对象
                for (Student s : ts)
                {
                        //System.out.println(s);
                        bw.write(s.toString());
                        bw.newLine();
                }
                bd.close();
                bw.close();
        }

}

class Student  implements Comparable
{
        private String name;
        private int chinese;
        private int math;
        private int english;
        private int sum;

        public Student(String name, int chinese, int math, int english)
        {
                this.name = name;
                this.chinese = chinese;
                this.math = math;
                this.english = english;
                sum = chinese + math + english;
        }

        public int getSum()
        {
                return sum;
        }

        public String toString()
        {
                return name + "," + chinese + "," + math + "," + english + "," + sum;
        }
       
        public int compareTo(Object obj)
        {
               
                if(!(obj instanceof Student))
                        throw new RuntimeException("不是学生对象");
                Student s = (Student)obj;

                if(this.sum<s.sum)
                        return 1;
                if(this.sum==s.sum)
                {
                        return s.name.compareTo(this.name);
                }
                return -1;
        }
}

回复 使用道具 举报
希望能帮到你。
回复 使用道具 举报
//遍历TreeSet集合打印每一个Student对象
  1. BufferedWriter br=new BufferedWriter(FileWriter("stu.txt"));
  2. for(Student s:stu)
  3. {
  4.         br.write(s.toString());
  5.         br.newLine();
  6.         br.flush();
  7. }
  8. br.close();
复制代码

你试一下
回复 使用道具 举报
Hansion 中级黑马 2015-11-19 23:16:57
7#
比方说你的程序编译好后叫1.exe
在命令行输入
1.exe >result.txt

运行之后,控制台的东西就保存到result.txt里
回复 使用道具 举报
年强 中级黑马 2015-11-20 00:10:51
8#
  1. import java.io.*;
  2. import java.util.*;

  3. public class test
  4. {

  5.         /**
  6.          * 有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,
  7.          * 输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。
  8.          * 要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
  9.          *
  10.          * @throws IOException
  11.          */
  12.         public static void main(String[] args) throws Exception
  13.         {
  14.                 BufferedReader bd = new BufferedReader(new InputStreamReader(System.in));
  15.                  BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\stus.txt"));
  16.                 //System.out.println("请输入学生成绩格式是:姓名,语文成绩,数学成绩,英语成绩");
  17.                 // 创建TreeSet集合对象,在TreeSet的构造函数中传入比较器,按照总分比较
  18.                 TreeSet<Student> ts = new TreeSet<Student>();
  19.                 // 录入五个学生,所以以集合中的学生个数为判断条件,如果size是小于5就进行存储
  20.                 while (ts.size() < 5)
  21.                 {
  22.                         // 将录入的字符串切割,用逗号切割,会返回一个字符串数组,
  23.                                                 //将字符串数组中从二个元素转换成int数,第一个是姓名
  24.                         String line = bd.readLine();
  25.                         String[] arr = line.split(",");
  26.                         int chinese = Integer.parseInt(arr[1]);
  27.                         int math = Integer.parseInt(arr[2]);
  28.                         int english = Integer.parseInt(arr[3]);
  29.                         // 将转换后的结果封装成Student对象,将Student添加到TreeSet集合中
  30.                         ts.add(new Student(arr[0], chinese, math, english));
  31.                 }

  32.                 // 遍历TreeSet集合打印每一个Student对象
  33.                 for (Student s : ts)
  34.                 {
  35.                         //System.out.println(s);
  36.                         bw.write(s.toString());
  37.                         bw.newLine();
  38.                 }
  39.                 bd.close();
  40.                 bw.close();
  41.         }

  42. }

  43. class Student  implements Comparable
  44. {
  45.         private String name;
  46.         private int chinese;
  47.         private int math;
  48.         private int english;
  49.         private int sum;

  50.         public Student(String name, int chinese, int math, int english)
  51.         {
  52.                 this.name = name;
  53.                 this.chinese = chinese;
  54.                 this.math = math;
  55.                 this.english = english;
  56.                 sum = chinese + math + english;
  57.         }

  58.         public int getSum()
  59.         {
  60.             return sum;
  61.         }

  62.         public String toString()
  63.         {
  64.             return "["+name + "," + chinese + "," + math + "," + english + "," + sum+"]";
  65.         }
  66.       
  67.         public int compareTo(Object obj)
  68.         {
  69.                
  70.                 if(!(obj instanceof Student))
  71.                         throw new RuntimeException("不是学生对象");
  72.                 Student s = (Student)obj;

  73.                 if(this.sum<s.sum)
  74.                         return 1;
  75.                 if(this.sum==s.sum)
  76.                 {
  77.                     return s.name.compareTo(this.name);
  78.                 }
  79.                 return -1;
  80.         }
  81. }
复制代码


结果:
[j,99,99,99,297]
[i,100,90,90,280]
[n,90,96,85,271]
[y,89,79,98,266]
[h,88,88,88,264]
回复 使用道具 举报
  1. /**
  2. * 有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,
  3. * 输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。
  4. * 要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
  5. */

  6. /**
  7. * 1.先录入信息;
  8. * 2.进行排序;
  9. * 3.输出到文件中。
  10. */
  11. package com.itheima.problem;

  12. import  java.io.*;
  13. import  java.util.*;


  14. class Student  implements Comparable<Object>{
  15.          String studentName;
  16.          float  chineseReport;
  17.          float  mathReport;
  18.          float  englishReport;
  19.          float  sumScore;
  20.    
  21.         public Student() {         
  22.        
  23.         }
  24.        
  25.         public static Student  StudentFactory(String s){
  26.                 System.out.println(s);
  27.                 String[] data;
  28.                 Student sd = new Student();
  29.         data = s.split(",");
  30.         
  31.         for(int i=0;i<data.length;i++){
  32.                 System.out.println(data[i]);
  33.         }
  34.         
  35.         sd.studentName = data[0];
  36.         sd.chineseReport = Float.parseFloat(data[1]);
  37.         sd.mathReport = Float.parseFloat(data[2]);
  38.             sd.englishReport = Float.parseFloat(data[3]);
  39.             sd.sumScore = Float.parseFloat(data[1])
  40.                             +Float.parseFloat(data[2])+
  41.                             Float.parseFloat(data[3]);
  42.            
  43.             return sd;
  44.         }
  45.        
  46.         @Override
  47.         public String toString() {
  48.                 return studentName + " " + chineseReport + " "
  49.                                 + mathReport + " " + englishReport + " " + sumScore;
  50.         }
  51.        
  52.         public int compareTo(Object o)
  53.         {      
  54.            if(!(o instanceof Student))
  55.                    throw new RuntimeException("不是学生对象");
  56.           
  57.            Student s = (Student)o;
  58.            if(this.sumScore<s.sumScore){
  59.                    return 1;   
  60.            }   
  61.            else if(this.sumScore==s.sumScore)
  62.            {
  63.                    return this.studentName.compareTo(s.studentName);
  64.            }
  65.           
  66.            return -1;
  67.         }
  68. }

  69. public  class  Test1{
  70.         public static void main(String[] args)
  71.                         throws IOException {
  72.                 String dataInfor ;
  73.                 Student sd;
  74.                 List<Student>   stuArray =  new  ArrayList<Student>();
  75.                
  76.                 //Input Datas
  77.             System.out.println("请输入学生成绩格式是:姓名,语文成绩,数学成绩,英语成绩:");
  78.         while(true){
  79.                     BufferedReader bd = new BufferedReader(new InputStreamReader(System.in));
  80.                     if((dataInfor = bd.readLine())!=null)        {
  81.                             if(dataInfor.equals("end")){
  82.                                     System.out.println("End Input!");
  83.                                     break;
  84.                             }   
  85.                     }
  86.                     
  87.                     sd = Student.StudentFactory(dataInfor);
  88.                     System.out.println(sd);
  89.                     stuArray.add(sd);  
  90.         }
  91.         
  92.         //sort
  93.         Collections.sort(stuArray);
  94.         System.out.println(stuArray);

  95.         //output file
  96.             PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("stu.txt")));
  97.             ListIterator< Student> it = stuArray.listIterator();
  98.             while(it.hasNext()){
  99.                     pw.println(it.next());
  100.             }
  101.             pw.close();
  102.         }
  103. }
复制代码
回复 使用道具 举报
vincent 40.0 40.0 40.0 120.0
lsq 30.0 30.0 30.0 90.0
tszy 20.0 20.0 20.0 60.0
回复 使用道具 举报
哦,额滴神啊,转了一大圈,竟然没几个会的,给不了什么答案,好失败。。。
回复 使用道具 举报
也想学习一下
回复 使用道具 举报
木易延 来自手机 中级黑马 2015-11-22 19:07:37
13#
我都晕了
回复 使用道具 举报
个人觉得8楼的比9楼的至少可读性好一点,8楼的很清晰,9楼的说真的我看不下去。
回复 使用道具 举报
Weidan 中级黑马 2015-11-28 20:37:17
15#
今天整理笔记的时候刚整理到这个问题 System.out.println();是可以定向输入到文件的 代码如下所示
希望能帮到你
  1. //重定向
  2. System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream(new File("D:/test/system.txt"))),true)); //设置输出到文件,true表示输出后自动刷新
  3. String str = "aaa";
  4. System.out.println(str);
  5. //回到控制台
  6. System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream(FileDescriptor.out)),true));//设置回到控制台
  7. System.out.println("回到控制台");
复制代码
回复 使用道具 举报
得到键盘的数据。
1.Map<name,student> map    student 属性{name,成绩1,成绩2,成绩3,总分}
2.意思就是 通过 Map集合 的key 总分   取出 student 对象,得到信息后,存放入文本
3.存入List 中  进行排序 。  每条数据 存放文本
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马