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;
}
}
}
}
然后好吧,你想要數組的最后一個索引,因為它是升序排序的。
添加回答
舉報