erd*_*ter 7 java arrays sorting
我有一个由名称和分数组成的字符串数组.我想按分数对该数组进行排序.问题是,考虑到它是一个字符串数组,分数是字符串,导致13,16,2,5,6而不是2,5,6,13,16.我正在使用此代码:
int spaceIndex;
String[][] scoreboard;
String[] playername;
String[] score;
int sbsize;
array1.add("Thomas" + ":" + 5);
array1.add("Blueb" + ":" + 6);
array1.add("James" + ":" + 16);
array1.add("Hleb" + ":" + 13);
array1.add("Sabbat" + ":" + 2);
sbsize = array1.size();
scoreboard = new String[sbsize][2];
playername = new String[sbsize];
score = new String[sbsize];
pos2 = new int[sbsize];
for (int i=0; i<array1.size(); i++)
{
spaceIndex = array1.get(i).indexOf(':');
scoreboard[i][0] = array1.get(i).substring(0, spaceIndex);
scoreboard[i][1] = array1.get(i).substring(spaceIndex+1, array1.get(i).length());
}
Arrays.sort(scoreboard, new Comparator<String[]>() {
@Override
public int compare(String[] entry1, String[] entry2) {
String time1 = entry1[1];
String time2 = entry2[1];
return time1.compareTo(time2);
}
});
Run Code Online (Sandbox Code Playgroud)
解决办法是什么?
fic*_*ion 16
将它们转换为int.我记得,像......
Arrays.sort(scoreboard, new Comparator<String[]>() {
@Override
public int compare(String[] entry1, String[] entry2) {
Integer time1 = Integer.valueOf(entry1[1]);
Integer time2 = Integer.valueOf(entry2[1]);
return time1.compareTo(time2);
}
});
Run Code Online (Sandbox Code Playgroud)
您还可以创建简单的值对象类,以便于操作.喜欢...
class Player
{
public String name;
public int score;
}
Run Code Online (Sandbox Code Playgroud)
之后你可以做
Player[] scoreboard = ...
Arrays.sort(scoreboard, new Comparator<Player>() {
@Override
public int compare(Player player1, Player player2) {
if(player1.score > player2.score) return 1;
else if(player1.score < player2.score) return -1;
else return 0;
}
});
Run Code Online (Sandbox Code Playgroud)
编辑:我建议您了解基本的OOP原则,这将在一开始就帮助您.
编辑2:Java 8(带有功能接口和lambda):
Arrays.sort(scoreboard, (player1, player2) -> {
Integer time1 = Integer.valueOf(player1[1]);
Integer time2 = Integer.valueOf(player2[1]);
return time1.compareTo(time2);
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28662 次 |
最近记录: |