【发布时间】:2013-03-03 17:38:00
【问题描述】:
这是一个按 ID 对文件进行排序的完整程序。但是,我想按等级对其进行排序。我修改了好几次,但它似乎不起作用。有人可以指导我在哪里将 ID 更改为评分。另外,您认为这段代码可以简化吗,或者有没有比这段代码更简单的代码。
抱歉缩进不好,这个源码也可以在here找到。
student.txt 文件:
4 A 87 A
5 B 99 A+
1 C 75 A
2 D 55 C
3 E 68 B
来源:
import java.io.*;
import java.util.*;
class ShowData implements Comparable {
int id;
String name;
int marks;
String grade;
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setMarks(int marks) {
this.marks = marks;
}
public int getMarks() {
return marks;
}
public void setGrade(String grade) {
this.grade = grade;
}
public String getGrade() {
return grade;
}
public int compareTo(Object Student) throws ClassCastException {
if (!(Student instanceof ShowData))
throw new ClassCastException("Error");
int ide = ((ShowData) Student).getId();
return this.id - ide;
}
}
public class SortFile {
SortFile() {
int j = 0;
ShowData data[] = new ShowData[5];
try {
FileInputStream fstream = new FileInputStream("C:/student.txt");
// Use DataInputStream to read binary NOT text.
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
ArrayList list = new ArrayList();
while ((strLine = br.readLine()) != null) {
list.add(strLine);
}
Iterator itr;
for (itr = list.iterator(); itr.hasNext();) {
String str = itr.next().toString();
String[] splitSt = str.split(" ");
String id = "", name = "", marks = "", grade = "";
for (int i = 0; i < splitSt.length; i++) {
id = splitSt[0];
name = splitSt[1];
marks = splitSt[2];
grade = splitSt[3];
}
data[j] = new ShowData();
data[j].setId(Integer.parseInt(id));
data[j].setName(name);
data[j].setMarks(Integer.parseInt(marks));
data[j].setGrade(grade);
j++;
}
Arrays.sort(data);
File file = new File("C:/new.txt");
FileWriter fw = new FileWriter(file, true);
BufferedWriter out = new BufferedWriter(fw);
System.out.println("********Sorted by id********");
String strVal = "";
for (int i = 0; i < 5; i++) {
ShowData show = data[i];
int no = show.getId();
String name = show.getName();
int marks = show.getMarks();
String grade = show.getGrade();
System.out.println(no + " " + name + " " + marks + " " + grade);
String d = no + " " + name + " " + marks + " " + grade;
ArrayList al = new ArrayList();
al.add(d + "\n");
Iterator itr1 = al.iterator();
while (itr1.hasNext()) {
out.write(itr1.next().toString());
out.newLine();
}
}
out.close();
} catch (Exception e) {
}
}
public static void main(String[] args) {
SortFile data = new SortFile();
}
}
【问题讨论】:
-
你尝试了什么?你有什么问题?
-
我认为从网站逐字复制代码存在严重问题,然后询问该方法是否存在任何问题。退后两步,从头开始,这样您就可以按需重现这种行为:您需要读取什么文件,您需要关闭行的哪个部分来对字符串进行排序,以及哪些方法那会需要吗?我认为解决方案比这里介绍的要简单一些。
-
如上所述,我将 Id 更改为 Grade 以按 GRADE 对其进行排序。我尝试多次修改代码,但没有取得任何成果。我不想发布我修改的代码,因为它们包含很多错误。