📄 java-paiming.txt
字号:
从键盘输入若干学生的学号和JAVA课程的成绩.格式如下
01 87
02 90
03 60
然后按成绩排序. 并写入到文件 C:\java.txt
思路:
class javaScore { string studentno, float score}
从 system.in 中读入数据, 每一行读入后生成一个 new javaScore, 存放到
一个List 中.
接下来解决排序问题,现在的问题是javaScore类如何排序如何比较大小呢?
在“集合框架”中有两种比较接口:Comparable接口和Comparator接口。像String和Integer等Java内建类实现 Comparable接口以提供一定排序方式,但这样只能实现该接口一次。对于那些没有实现Comparable接口的类、或者自定义的类,您可以通过 Comparator接口来定义您自己的比较方式。
利用Comparable接口创建您自己的类的排序顺序,只是实现compareTo()方法的问题。
若一个类不能用于实现java.lang.Comparable,或者您不喜欢缺省的Comparable行为并想提供自己的排序顺序(可能多种排序方式),你可以实现Comparator接口,从而定义一个比较器。
(1)int compare(Object o1, Object o2): 对两个对象o1和o2进行比较,如果o1位于o2的前面,则返回负值,如果在排序顺序中认为o1和o2是相同的,返回0,如果o1位于o2的后面,则返回正值
(2)boolean equals(Object obj): 指示对象obj是否和比较器相等。
“该方法覆写Object的equals()方法,检查的是Comparator实现的等同性,不是处于比较状态下的对象。”
好,看看我们用J2SE 1.4 写出来是什么样子
import java.io.*;
import java.util.*;
class javaScore implements Comparable {
String sno;
float score;
public javaScore(String a,float b){
sno = a;
score = b;
}
public int compareTo(Object a){
javaScore aJavaScore = (javaScore)a;
if (score<aJavaScore.getScore()) return -1;
else if (score>aJavaScore.getScore()) return 1;
else return 0;
}
public float getScore() {
return score;
}
public String getSno() {
return sno;
}
}
public class inputScore {
public static void main(String[] args) throws Exception {
System.out.println("开始输入记录");
BufferedReader sbf = new BufferedReader(new InputStreamReader(System.in));
String aline="";
ArrayList scoreList = new ArrayList();
do{
try{
aline = sbf.readLine();
if(!aline.equalsIgnoreCase("over")){
int blankPos = aline.indexOf(" ");
String sno = aline.substring(0,blankPos).trim();
float score = Float.parseFloat(aline.substring(blankPos).trim());
scoreList.add(new javaScore(sno,score));
System.out.println(sno + "--" + score);
}
}catch(Exception e){
System.out.println("错误,重新输入该记录");
}
}while(!aline.equalsIgnoreCase("over"));
java.util.Collections.sort(scoreList);
FileOutputStream fos = new FileOutputStream("c:\\java.txt");
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fos,"gb2312"));
writer.write("学号\t成绩\r\n");
ListIterator l = scoreList.listIterator();
while (l.hasNext()){
javaScore aL= (javaScore)(l.next());
writer.write(aL.getSno() + "\t" + aL.getScore()+"\r\n");
}
writer.close();
fos.close();
System.out.println("存盘成功");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -