【问题标题】:How to sort a file by grade?如何按等级对文件进行排序?
【发布时间】: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 对其进行排序。我尝试多次修改代码,但没有取得任何成果。我不想发布我修改的代码,因为它们包含很多错误。

标签: java arrays file sorting


【解决方案1】:

compareTo() 方法当前比较的是 ID,而不是成绩。尝试比较 而是标记。

【讨论】:

  • 没错,那么我将如何将其更改为 GRADE 而不是 ID。例如,当我更改返回 this.id - ide;返回 this.grade-ide;它给了我一个错误“坏操作数”。
  • 这是因为您不能在两个字符串上使用 (+,-,*,/)。看起来分数是成绩的整数表示,所以也许使用 this.marks - ((ShowData) Student).getMarks() ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
相关资源
最近更新 更多