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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 廉伟 中级黑马   /  2012-10-2 12:04  /  1845 人查看  /  6 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 廉伟 于 2012-10-2 20:17 编辑

有五个学生,每个学生有3门课的成绩,定义一种比较直观的文本文件格式,
输入学生姓名和成绩,从键盘输入以上数据(包括姓名,三门课成绩),
按总分数从高到低的顺序将学生信息存放在磁盘文件"stu.txt"中。

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
思路:
排序集合:Set
键盘录入:InputStream(System.in)
存在硬盘:properties
回复 使用道具 举报
package com.itheima;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Comparator;

import java.util.Iterator;

import java.util.Set;
import java.util.TreeSet;

public class Test11 {

        /**
         * 有五个学生,每个学生有3门课的成绩,定义一种比较直观的文本文件格式,
输入学生姓名和成绩,从键盘输入以上数据(包括姓名,三门课成绩),
按总分数从高到低的顺序将学生信息存放在磁盘文件"stu.txt"中。

         * @param args
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
                // TODO Auto-generated method stub
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw=new BufferedWriter(new FileWriter("d:\\stu.txt"));
    System.out.println("请输入数据");
    Set<Student> set=new TreeSet<Student>(new TreeSet());
    String len=null;
    while((len=br.readLine())!=null)
    {
            bw.write(len);
            bw.newLine();
            bw.flush();
            Iterator<Student> it=set.iterator();
            while(it.hasNext())
            {
                    Student s=it.next();
                    bw.write(s.getScore());
            }
            if("over".equals(len))
           
                    break;
           
    }
   
    br.close();
    bw.close();
        }

}
class Student implements Comparator<Student>{
      private String name;
      private int score;
      
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public int getScore() {
                return score;
        }
        public void setScore(int score) {
                this.score = score;
        }
       
        public int compare(Student s1,Student s2) {
                // TODO Auto-generated method stub
                return s1.getScore()-s2.getScore();
        }
        Student(String name,int score){
                this.name=name;
                this.score=score;
        }
       
       
}
目前就写了这么多,结果是在硬盘里写入了从键盘读取的数据,可是没排序成功,有点纠结,哪位会的可以帮忙修改下。

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
张丽 发表于 2012-10-2 13:14
package com.itheima;

import java.io.BufferedReader;

看了下你的,你为啥不先排好序再往文件里面写入?
回复 使用道具 举报
本帖最后由 郭阳 于 2012-10-2 19:37 编辑
  1. import java.util.*;
  2. import java.io.*;

  3. class Student
  4. {
  5.         private String name;
  6.         private int score1;
  7.         private int score2;
  8.         private int score3;
  9.         Student(String name,int score1,int score2,int score3)
  10.         {
  11.                 this.name=name;
  12.                 this.score1=score1;//这里可以加入if判断输入的分数是否为合法分数
  13.                 this.score2=score2;
  14.                 this.score3=score3;
  15.         }
  16.         String getName(){return name;}//这里为了减少空间方便阅读就这样写了
  17.         int getScore1(){return score1;}
  18.         int getScore2(){return score1;}
  19.         int getScore3(){return score3;}
  20. }

  21. class StudentComparator implements Comparator<Student>//学生的比较器来比较总分
  22. {
  23.         public int compare(Student s1,Student s2)
  24.         {
  25.                 int num=(s2.getScore1()+s2.getScore2()+s2.getScore3())-(s1.getScore1()+s1.getScore2()+s1.getScore3());
  26.                 if (num==0)//保证不会将总分相同的学生当做重复元素
  27.                         return 1;
  28.                 return (num);
  29.         }
  30. }

  31. class Demo
  32. {
  33.         public static void main (String []args) throws Exception//为了代码简单就把异常抛了
  34.         {
  35.                 System.out.println
  36.                         ("\n请输入学生信息,用逗号隔开,如:\"张三,98,97,100\",全部输入结束后请输入done完成输入\n");
  37.                 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  38.                 String len=null;
  39.                 TreeSet<Student>ts=new TreeSet<Student>(new StudentComparator());
  40.                 while((len=br.readLine())!=null)
  41.                 {
  42.                         if (len.equals("done"))//输入多个学生,结束后用done结束
  43.                                 break;
  44.                         String[] arr=len.split(",");//将录入的学生信息切割成字符串数组
  45.                         ts.add(new Student(arr[0],Integer.parseInt(arr[1]),Integer.parseInt(arr[2]),Integer.parseInt(arr[3])));//将信息以学生对象传进集合并在内存中根据比较器排序
  46.                 }
  47.                 br.close();//下面开始往文件上写了
  48.                 BufferedWriter bw=new BufferedWriter(new FileWriter("Stu.txt"));
  49.                 for(Student s:ts)
  50.                 {
  51.                         bw.write(s.getName()+"\t"+String.valueOf(s.getScore1())+"\t"+String.valueOf(s.getScore2())+"\t"+String.valueOf(s.getScore3()));
  52.                         bw.newLine();
  53.                 }
  54.                 bw.close();
  55.         }
  56. }
复制代码
你编译运行一下我的代码,看是不是你要的效果。

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
这个 必须顶
回复 使用道具 举报
冯超 高级黑马 2012-10-2 20:43:46
7#
凑合着看
package rw;

import java.io.*;


/*有五个学生,每个学生有3门课的成绩,定义一种比较直观的文本文件格式,
输入学生姓名和成绩,从键盘输入以上数据(包括姓名,三门课成绩),
按总分数从高到低的顺序将学生信息存放在磁盘文件"stu.txt"中。*/
public class Stundent {
        private Integer Math;    //数学成绩
        private Integer Java;    //java课程成绩
        private Integer English; //英语成绩
        private int i;

        StringBuffer sb = new StringBuffer();;
        public StringBuffer getCourst(int Math, int Java, int English, int i)
        {
                this.Math = Math;
                this.Java = Java;
                this.English = English;
                this.i = i;
                        //将整形转化成一个字符串
                        sb.append(Integer.toString(Math) + "    ").append(Integer.toString(Java) + "     ").append(Integer.toString(English)).append("\r\n");
                System.out.println(sb);
                return sb;
        }
        public void Writer()
        {
                String str1;
                String str;
               
                str1 = "Math   Java   English"; //科目
                try {
                    FileWriter        fw = new FileWriter("D:\\stu.txt");
                        BufferedWriter bw = new BufferedWriter(fw);
                        bw.write(str1);
                        bw.newLine();
                        bw.write(sb.toString());

                        
                        
                        bw.flush();
                 //       System.out.println(i);
                        fw.close();
                 
                        
                        
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        
               
        }

}
package rw;

public class test {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                Stundent s = new Stundent();
                s.getCourst(100, 99, 80, 1);
                s.getCourst(100, 90, 88, 2);
                s.getCourst(100, 10, 88, 3);
                s.getCourst(100, 10, 70, 4);
                s.getCourst(130, 10, 88, 5);
                s.Writer();
        }

}

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马