io流中排序问题,就指教

黑夜中的一点慰藉 2013-01-08 08:30:45
按班级对学员总成绩按降序排序,结果通过IO流输出到result_1.txt文件中。

如:

班级[classIName classID]

学员姓名学员ID[总分:457,学科ID:87,学科ID:83,学科ID:82,学科ID:83]

学员姓名学员ID[总分:453,学科ID:87,学科ID:83,学科ID:82,学科ID:83]

学员姓名学员ID[总分:448,学科ID:87,学科ID:83,学科ID:82,学科ID:83]

班级[classIName classID]

学员姓名学员ID[总分:457,学科ID:87,学科ID:83,学科ID:82,学科ID:83]

学员姓名学员ID[总分:454,学科ID:87,学科ID:83,学科ID:82,学科ID:83]

学员姓名学员ID[总分:445,学科ID:87,学科ID:83,学科ID:82,学科ID:83]



说明:

classIName classID用空格隔开,className为班级名称,classID为班级编号。

学员姓名学员ID用空格隔开,每位学员成绩独占一行。总分为学员各学科成绩之和
...全文
318 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
iGoodLoser 2013-01-09
  • 打赏
  • 举报
回复
封装,抽象 Student,Comparable
liangrf782533655 2013-01-09
  • 打赏
  • 举报
回复
引用 5 楼 qq631431929 的回复:
读源文件--解析内容成学员bean的数组--数组排序--输出到目标文件
这个回答很精炼,其实一个主要逻辑就是取出个个班级学员总分,然后排个序,然后再输出就行了
Candylibin 2013-01-09
  • 打赏
  • 举报
回复
写一个比较器 Comparator 把你要比较的东西写在里面,把比较器传给你存放数据的集合然后再把集合中的数据写到指定的目录即可
喵主子 2013-01-09
  • 打赏
  • 举报
回复
引用 17 楼 wangwuyilove 的回复:
如果在上面的基础上在加上:通过IO读result_1.txt文件,以多线程方式实现大学录取学生功能 又怎么实现那???
如果同类大学之间可以抢学生指的是谁先发现谁录取的话,不如用随机数决定好了。反正多线程一起竞争一个资源的结果也是不可预测的,单线程使用随机数来分配更节省资源,产生的结果的对外表现与多线程还是一致的。
brightyq 2013-01-09
  • 打赏
  • 举报
回复
读文件使用IO 对象排序查看Comparator接口
suciver 2013-01-09
  • 打赏
  • 举报
回复
在文件中没法排序,我们只能在输出时按照顺序输出。你这里有班级和学生,我们建两个javaBean,一个是班级,ClassBean,一个是学生Student。而由于对象之间的关系是一个班级多个学生,所以ClassBean中就可以有Student的对象Set<Student> students,为了方便排序我们用TreeSet。可以使用TreeSet的Comparator用总成绩来进行排序。把这些内容读入到程序中读到班级就生成一个ClassBean的对象classBean,将下面的学生信息解析成Student的对象student然后再从classBean.getStudents().add(student);这样形成的List<ClassBean>就可以按顺序的输出到文件中了
  • 打赏
  • 举报
回复
大神们给点意见,本人是初学者,在这方面弄的不是太懂,这是一道面试题吧,挺长的我做起来有点困难,只做了一点儿,大神给点意见吧, 大学列表:青华大学、北京大学、南京大学、复旦大学、南京职业技术学院 说明: A类大学为青华大学、北京大学,分数线为340,名额各为3名,; B类大学为南京大学、复旦大学,分数线为320,名额各为10名;; C类大学为南京职业技术学院,分数线为250,名额不限; 分数超过名额应该取最高分;达不到分数线可以不录取; 录取按大学类别进行:先A类,再B类,最后C类; 同类大学之间可以抢学生,同一学生只能被一所大学录取,以先录取为准; 结果通过IO输出result_2.txt,如: 青华大学: 学员姓名学员ID[总分:457,学科ID:87,学科ID:83,学科ID:82,学科ID:83] 学员姓名学员ID[总分:448,学科ID:87,学科ID:83,学科ID:82,学科ID:83] 北京大学: 学员姓名学员ID[总分:457,学科ID:87,学科ID:83,学科ID:82,学科ID:83] 学员姓名学员ID[总分:448,学科ID:87,学科ID:83,学科ID:82,学科ID:83] 南京大学: 学员姓名学员ID[总分:457,学科ID:87,学科ID:83,学科ID:82,学科ID:83] 学员姓名学员ID[总分:448,学科ID:87,学科ID:83,学科ID:82,学科ID:83] 复旦大学: 学员姓名学员ID[总分:457,学科ID:87,学科ID:83,学科ID:82,学科ID:83] 学员姓名学员ID[总分:448,学科ID:87,学科ID:83,学科ID:82,学科ID:83] 南京职业技术学院: 学员姓名学员ID[总分:457,学科ID:87,学科ID:83,学科ID:82,学科ID:83] 学员姓名学员ID[总分:448,学科ID:87,学科ID:83,学科ID:82,学科ID:83] 未被录取学员:学员姓名学员ID[总分:128],学员姓名学员ID[总分:215]
  • 打赏
  • 举报
回复
如果在上面的基础上在加上:通过IO读result_1.txt文件,以多线程方式实现大学录取学生功能 又怎么实现那???
安特矮油 2013-01-09
  • 打赏
  • 举报
回复
封装一个Student的对象,例如: Student{ String name; String id; double total; List<SingleScore> scores;//各科成绩 toString(){ //按照你要输出的写一个toString方法。 } } 根据班级来放置这些students, 写个比较器来针对集合的total进行排序。然后写入到文件中就可以了
_jerrytiger 2013-01-09
  • 打赏
  • 举报
回复
1) 先从源txt文件读取内容 一行一行读取 将读取的每一行内容都保存到一个List<String>集合当中 , 2) 然后对List当中的内容进行排序(想办法从一行字符串中获取总分那个数字。根据总分排序) 3) 将List中的内容写入到新文件
笑莫问 2013-01-09
  • 打赏
  • 举报
回复
可以在写文件时,当成一个object(可以是个map对象)序列化到文件中,用时反序列化到内存中,然后去排序。
lizhengjun555 2013-01-09
  • 打赏
  • 举报
回复
总的成绩表类,体现了基本的思路,需要一个具体类来实现从文件加载及输出到文件的算法。

package com.zhengjihuaren.csdn;

import java.io.File;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * 成绩表
 */
public abstract class ScoreTable {
	private List<Score> scores;

	/**
	 * 从文件中加载成绩表
	 */
	public void loadFile(File inFile) {
		scores = doLoadFile(inFile);
	}

	protected abstract List<Score> doLoadFile(File file);

	/**
	 * 对成绩表进行排序
	 */
	public void sort() {
		if (scores != null) {
			Collections.sort(scores, new Comparator<Score>() {
				@Override
				public int compare(Score o1, Score o2) {
					return Integer.compare(o1.getTotalScore(),
							o2.getTotalScore());
				}
			});
		}
	}

	/**
	 * 将成绩表输出到文件
	 */
	public void writeFile(File outFile) {
		doWriteFile(outFile);
	}

	protected void doWriteFile(File outFile) {
	}
}
还有一个学生成绩单类,这个就相对很简单了。

package com.zhengjihuaren.csdn;

public class Score {
	private String name;
	private String id;
	private int totalScore;

	public Score(String name, String id, int totalScore) {
		super();
		this.name = name;
		this.id = id;
		this.totalScore = totalScore;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public int getTotalScore() {
		return totalScore;
	}

	public void setTotalScore(int totalScore) {
		this.totalScore = totalScore;
	}

}
  • 打赏
  • 举报
回复
package com.isoftstone.readxml;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

public class ReadStuData {
	/** * @param args */
	public static void main(String[] args) throws Exception {
		List<Student> myList = readXML();
		List<Student> stu = array(myList);
		write(stu);
	}
	
	public static List<Student> readXML()
	{
		File file = new File("D:\\1\\result_1.txt");
		
		List<Student> stuList = new ArrayList<Student>();//学生集合  
		try {
			SAXBuilder sb = new SAXBuilder();
			String name = "bin.com.isoftstone.readxml.Student";
			// bin是eclipse中java编译后的class目录
			String newName = name.replaceAll("[.]", "/");
			System.out.println(newName + ".xml");
			Document doc = null;
			doc = sb.build(new File(newName + ".xml"));
			Element root = doc.getRootElement();
			// HD
			if (root == null) {
				System.out.println("root is null");
				return null;
			} else {
				//System.out.println(root.getName());
			}
			@SuppressWarnings("unchecked")
			List<Element> list = root.getChildren("student");
			// child
			for (int i = 0; i < list.size(); i++) {
				Element element = (Element) list.get(i);
				@SuppressWarnings("unchecked")
				List<Element> idChildElements = element.getChildren();
				/*System.out.println("idChildElements.size():"
						+ idChildElements.size());*/
				Student stu = new Student();
				for (int k = 0; k < idChildElements.size(); k++) {
					Element element2 = (Element) idChildElements.get(k);
					
					String value = element2.getValue();
					switch (k) {
					case 0:
						stu.setStuName(value);
						break;
					case 1:
						stu.setStuCity(value);
						break;
					case 2:
						stu.setStuScore(Double.parseDouble(value));
						break;
					}
					
					//System.out.println(value.trim());
					//fr.write(value.trim()+"  \n");
				}
				stuList.add(stu);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return stuList;
	}
	
	/**
	 * 排序 
	 * @param list
	 * @return List<StudentVO> [返回类型说明]
	 */
	public static List<Student> array(List<Student> list) {
		Student stuTemp = null;
		// 冒泡排序
		for (int i = 0; i < list.size(); i++) {
			for (int j = 0; j < list.size() - i - 1; j++) {
				stuTemp = new Student();
				if (list.get(j).getStuScore() < list.get(j + 1).getStuScore()) {
					stuTemp = list.get(j);
					list.set(j, list.get(j + 1));
					list.set(j + 1, stuTemp);
				}
			}
		}
		
		return list;
	}
	
	/**
	 * 写入文件 <功能详细描述>
	 * 
	 * @param stu
	 * @return void [返回类型说明]
	 */
	public static void write(List<Student> stu) {
		File file = new File("D:\\1\\result_2.txt");
		try {
			file.createNewFile();
			FileWriter resultFile = new FileWriter(file);
			PrintWriter myFile = new PrintWriter(resultFile);

			for (int i = 0; i < stu.size(); i++) {
				// 每行每行写入
				myFile.println(stu.get(i).getStuName() + "  "
						+ stu.get(i).getStuCity() + "  "
						+ stu.get(i).getStuScore());
				if (i > 3) {
					break;
				}
			}
			myFile.close();
			resultFile.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

package com.isoftstone.readxml;

public class Student {

	private String stuName;
	private String stuCity;
	private double stuScore;
	public double getStuScore() {
		return stuScore;
	}
	public void setStuScore(double stuScore) {
		this.stuScore = stuScore;
	}
	public String getStuName() {
		return stuName;
	}
	public void setStuName(String stuName) {
		this.stuName = stuName;
	}
	public String getStuCity() {
		return stuCity;
	}
	public void setStuCity(String stuCity) {
		this.stuCity = stuCity;
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<students>
	<student>
		<name>wangwuyi</name>
		<city>nanjing</city>
		<score>90</score>
	</student>
	<student>
		<name>kangyongqiang</name>
		<city>nanjing</city>
		<score>95</score>
	</student>

</students>
这是我写的,各位大神根据题目,帮我改改!谢谢
  • 打赏
  • 举报
回复
谢谢各位大神的指点!我谢谢看
喵主子 2013-01-08
  • 打赏
  • 举报
回复
读源文件--解析内容成学员bean的数组--数组排序--输出到目标文件
Allen_Luo 2013-01-08
  • 打赏
  • 举报
回复
流星陨落 2013-01-08
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
班级[classIName classID] 学员姓名学员ID[总分:457,学科ID:87,学科ID:83,学科ID:82,学科ID:83] 学员姓名学员ID[总分:453,学科ID:87,学科ID:83,学科ID:82,学科ID:83] 学员姓名学员ID[总分:448,学科ID:87,学科ID:83,学科ID:82,学科ID:83] 是在另一个文件中的,怎么实现排序那?多少没有思路,能不能给点思路?谢谢
brightyq 2013-01-08
  • 打赏
  • 举报
回复
思路楼主不是都说的很好吗?问题在哪?

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧