我正在尝试编写一个代码来读取名称,电子邮件和标记的文件,以便将数据从较低的标记排序到较高的标记 文件的结构是名称;电子邮件;标记 名称;电子邮件;标志 ... 问题是我用这行'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);
}
}
答案 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());