-3

これは、ファイルをIDでソートする完全なプログラムです。ただし、グレード別に並べ替えたいと思います。何度か変更しましたが、うまくいかないようです。IDをグレードに変更する場所を教えてもらえますか。また、このコードは単純化できると思いますか、それともこのコードよりも単純な他のコードはありますか。

インデントが悪いので申し訳ありませんが、このソースコードはここにもあります

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();
    }
    }
4

1 に答える 1

0

compareTo() メソッドは現在、成績ではなく ID を比較しています。代わりにマークを比較してみてください。

于 2013-03-03T17:47:37.213 に答える