2 回答
TA贡献1780条经验 获得超5个赞
如果我理解正确,你有一个像这样的二维数组结构:
{name,score}
{name,score}
{name,score}
{name,score}
并且您想根据第二列进行排序:分数。
与其在二维数组中实现它,不如创建一个名为 Player 的对象
Player 有一个实现:
public class Player{
private String name;
private int score;
Player(String name){
this.name = name;
}
public void setScore(int score){
this.score = score;
}
public int getScore(){
return score;
}
}
现在您的记分牌现在可以实现为一个一维数组,如下所示:
Player[] scoreboard = new Player[playerSize];
更容易理解和阅读。
现在要对该数组进行排序,您可以实现一个自定义类,该类允许您比较两个 Player 类型的对象
class comparePlayer implements Comparator<Player>{
public int compare(Player a, Player b) {
if (a.getScore() < b.getScore()){
return -1;
}
else if (a.getScore() == b.getScore()){
return 0;
}
else{
return 1;
}
}
}
现在你可以像这样按分数排序 ->
Arrays.sort(scoreboard,new comparePlayer());
或者如果你真的想使用冒泡排序,那么你可以像这样实现它:
int length = scoreboard.length;
for (int i = 0; i < length-1; i++){
for (int j = 0; j < length-i-1; j++){
if (scoreboard[j].getScore() > scoreboard[j+1].getScore()){
Player temp = scoreboard[j];
scoreboard[j] = scoreboard[j+1];
scoreboard[j+1] = temp;
}
}
}
TA贡献1883条经验 获得超3个赞
在这种情况下,您可以通过修改来实现冒泡排序以比较重要的值。例子:
static void bubbleSort(String[][] arr) {
int arrayLength = arr.length;
for (int i = 0; i < arrayLength; i++) {
for (int j = 1; j < (arrayLength - i); j++) {
String nameTemp, scoreTemp;
int leftValue, rightValue;
leftValue = Integer.valueOf(arr[j - 1][1]);
rightValue = Integer.valueOf(arr[j][1]);
if (leftValue > rightValue) {
//swap elements
nameTemp = arr[j - 1][0];
scoreTemp = arr[j - 1][1];
arr[j - 1][0] = arr[j][0];
arr[j - 1][1] = arr[j][1];
arr[j][0] = nameTemp;
arr[j][1] = scoreTemp;
}
}
}
}
然后好吧,你想要数组的最后一个索引,因为它是升序排序的。
添加回答
举报