大家好 我想对2个相关文件进行排序,创建一个可以对它们进行排序的唯一索引
我有一个.txt文件,格式如下:
File1
Houston
Chicago
Seattle
Cleveland
另一个文件的格式如下:
File2
44
33
55
22
我想要以下输出:
Seattle 55
Houston 44
Chicago 33
Cleveland 22
我已经从.txt文件中创建了2个对象数组,因此我不能使用bubblesort,因为“<或>”运营商。我使用.sort函数对分数进行排序,但这样我就不会创建索引来对团队进行排序。我该如何解决这个问题呢?
这是我的代码
private void visualizzaClassificaButtonActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
List<String> teams = new ArrayList<String>();
List<Float> scores = new ArrayList<Float>();
try {
FileInputStream fstream = new FileInputStream("C:/Users/Fra....../file1");
FileInputStream fstream2 = new FileInputStream("C:/Users/Fra...../file2");
DataInputStream in = new DataInputStream(fstream);
DataInputStream in2 = new DataInputStream(fstream2);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
BufferedReader br2 = new BufferedReader(new InputStreamReader(in2));
String team = null;
String score = null;
while ((score = br.readLine()) != null && (team = br2.readLine()) !=null) {
teams.add(team);
scores.add(Float.parseFloat(score));
}
Object[] squadreTutte = teams.toArray();
Object[] punteggiTutti = scores.toArray();
Arrays.sort(punteggiTutti, Collections.reverseOrder());
//????????????????????????????????
for(int index=0; index<punteggiTutti.length; index++){
System.out.println(punteggiTutti[index]);
System.out.println(squadreTutte[index]);
}
in.close();
} catch (Exception e) {
}
}
请帮忙
答案 0 :(得分:2)
几乎总是当有人想要对并行数组进行排序时,就是object denial的情况。
你应该做的是创建一个对象来保存名称,得分对:
public class Team implements Comparable<Team> {
private final String name;
private final int score;
public Team(final String name, final int score) {
this.name=name;
this.score=score;
}
// add getters
public int compareTo(Team other) {
if (this.score != other.score) {
return Integer.valueOf(this.score).compareTo(other.score);
} else {
return this.name.compareTo(other.name);
}
}
}
然后,在读取文件时,为文件中的每一行创建一个Team
对象,将它们放入Collection
并对其进行排序。您需要在班级中实施Comparable
(如上所述)或提供Comparator
来对其进行排序。
答案 1 :(得分:1)
对团队进行排序并在天生的工作中得分要简单得多,并且读取集合的顺序相反。顺便说一句,除非有充分理由这样做,否则不要使用浮动或浮动。改为使用Long或Double。
基于@Joachim的团队课程
List<Team> teams = new ArrayList<Team>();
BufferedReader br=new BufferedReader(new FileReader("C:/Users/Fra..../file1"));
BufferedReader br2=new BufferedReader(new FileReader("C:/Users/Fra..../file2"));
String name = null;
String score = null;
while ((score = br.readLine()) != null && (name = br2.readLine()) != null)
teams.add(new Team(name, Double.parseDouble(score)));
br.close();
br2.close();
// reverse sort.
Collections.sort(teams, new Comparator<Team>() {
public int compare(Team t1, Team t2) {
return Double.compare(t2.score, t1.score);
}
});
for(Team t: teams)
System.out.println(t.name + ' ' + t.score);
public class Team {
final String name;
final double score;
public Team(String name, double score) {
this.name=name;
this.score=score;
}
}
答案 2 :(得分:0)
目标是第一个列表中的团队按照第二个列表中的分数进行排序?
您的问题是两个列表的排序无关。你应该尝试对夫妻“团队+得分”进行排序。也许使用像List<Entry<Double, String>>
这样的东西可以通过定义自定义比较器来做你想要的...