读取文件并对标记进行排序

时间:2017-05-09 08:30:08

标签: java arraylist

我正在尝试编写一个代码来读取名称,电子邮件和标记的文件,以便将数据从较低的标记排序到较高的标记 文件的结构是名称;电子邮件;标记                           名称;电子邮件;标志                           ... 问题是我用这行'note.get(j + 1)= note.get(j)'得到错误 “意外类型所需变量找到值”

这是我的代码是正确的吗?请帮忙

   try {
 BufferedReader lineReader = new BufferedReader(new 
 FileReader("C://wamp/www/text.txt"));
 String lineText = null;
 ArrayList<String> nom = new ArrayList<String>();
 ArrayList<String> email= new ArrayList<String>();
 ArrayList<Double> note = new ArrayList<Double>();
 while ((lineText = lineReader.readLine()) != null) {
 String[] split = lineText.split(";");
 nom.add(split[0]); 
 email.add(split[1]);
 note.add(Double.parseDouble(split[2])); 
}
double temp;
String temps;
 for(int i=0;i<note.size();i++){
for(int j=0;j<note.size()-1-i;j++){
  if(note.get(j)> note.get(j+1)){
    temp=note.get(j);
    note.get(j+1)=note.get(i);
    note.get(i)=temp;
      temps=nom.get(j);
    nom.get(j+1)=nom.get(i);
    nom.get(i)=temps;
            temps=email.get(j);
    email.get(j+1)=email.get(i);
    email.get(i)=temps;
  }
  }    

   }

  lineReader.close();
  } catch (IOException ex) {
  System.err.println(ex);
  }
  }

1 个答案:

答案 0 :(得分:0)

有一种简单的方法可以对列表进行排序。首先,创建一个新类,以便您可以将nom,email和note一起链接:

public class Entry implements Comparable {

    String nom;
    String email;
    double note;

    public Entry(String nom, String email, Double note) {
        this.nom = nom;
        this.email = email;
        this.note = note;
    }

    @Override
    public int compareTo(Object o) {
        if(!(o instanceof Entry)) throw new IllegalArgumentException("Wrong type!");

        Entry other = ((Entry) o);

        if(this.note > other.note) return 1;
        if(this.note == other.note) return 0;
        return -1;
    }
}

您可以实现Comparable接口,以便您可以根据需要使用内置的java方法轻松排序。 Read more about this here

在阅读文件之前执行此操作:

ArrayList<Entry> entries = new ArrayList<>();

您阅读的每一行/条目(可能想要添加输入验证):

Entry next = new Entry(split[0], split[1], Double.parseDouble(split[3]));
entries.add(next);

然后,当您完成阅读/创建条目列表时,只需执行此操作即可对其进行排序:

Collections.sort(entries);

您的列表现在将从最高 - >最低排序。扭转它:

Collections.sort(entries, Collections.<Entry>reverseOrder());