[英]Java Sorting a 2d array rows into ascending and columns into descending order
[英]Sorting a 2D string array in Java in descending order and writing it to a file
因此,我必须从Java文件中读取一个字符串。 这是一个高分系统。 文件的每一行都包含类似的内容:“ 24 / Kilian”。 /前面的数字是分数,/后面的文本是名称。
现在,我的问题是我必须对得分降序进行排序并将其写回到文件中。 新分数应覆盖旧分数。
我尝试过,但是无法正常工作。 我已经写了一些代码,从文件中逐行读取成绩+名称。
public static void sortScores() {
String [][]scores = null;
int i = 1;
try (BufferedReader br = new BufferedReader(new FileReader("score.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
scores[i][0] = line.substring(0, line.indexOf("/"));
scores[i][1] = line.substring(line.indexOf("/"), line.length());
i++;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
因此,这段代码基本上将分数和名称写在二维数组中,如下所示:
score [0] [0] =“ 24”;
score [0] [1] =“基里安”;
score [1] [0] =“ 33”;
score [1] [1] =“名称”;
score [2] [0] =“ 45”;
score [2] [1] =“ AnotherName”;
我希望有人可以帮助我解决我的问题。
将Arrays.sort(arr,比较器)与自定义比较器一起使用:
Arrays.sort(theArray, new Comparator<String[]>(){
@Override
public int compare(final String[] first, final String[] second){
// here you should usually check that first and second
// a) are not null and b) have at least two items
// updated after comments: comparing Double, not Strings
// makes more sense, thanks Bart Kiers
return Double.valueOf(second[1]).compareTo(
Double.valueOf(first[1])
);
}
});
System.out.println(Arrays.deepToString(theArray));
我建议您创建一个新class Score
,其中包含您的数据(分数+名称),并为您从文件中读取的每一行添加一个Score
的新实例到ArrayList
中。 之后,您可以实现Comparator
并对ArrayList
排序。 这很容易,因为您不知道字符串数组将变大,并且在使用数组时需要知道这一点。
public class Score {
public Score(int score, String name) {
this.score = score;
this.name = name;
}
int score;
String name;
// getter
}
List<Score> scoreList = new ArrayList<>();
String line;
while ((line = br.readLine()) != null) {
scoreList.add(new Score(Integer.parseInt(line.substring(0, line.indexOf("/"))), line.substring(line.indexOf("/"), line.length())));
}
Collections.sort(scoreList, new Comparator<Score>() {
public int compare(Score s1, Score s2) {
return s1.getScore() - s2.getScore();
}
}
// write to file
您可以使用java.util.Arrays
的sort
-Method:
Arrays.sort(scores, (a, b) -> -a[0].compareTo(b[0]));
但这导致“ 3”高于“ 23”的情况。 因此,您可能应该创建一个保存该值的新类并使用ArrayList
你可以试试:
HashMap<Integer, String > map = new HashMap<>();
try (BufferedReader br = new BufferedReader(new FileReader("score.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
String[] lines = line.split("/");
map.put(Integer.valueOf(lines[0]),lines[1]);
}
SortedSet<Integer> keys = new TreeSet<Integer>(map.keySet());
keys.forEach(k -> System.out.println(map.get(k).toString() + " value " + k ));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.