[英]How do I fix my sorting method So i get get alphabetical order for names
我正在嘗試修復排序方法。 我正在從txt文件讀取內容,並嘗試按字母順序獲取它們。
我不能使用可比的工具,然后再使用collections.sort(),因為我的教練不允許這樣做。
//How I am trying to sort
public static void sortPlayers(ArrayList<BingoPlayer> players){
BingoPlayer temp;
int value = 0;
for(int i = 0; i < players.size()-1; i++)
{
value = compareTo(players.get(i), players.get(i + 1));
if(value < 0 || value == 0){
//continue;
}
else if(value > 0){
temp = players.get(i);
players.set(i, players.get(i + 1));
players.set(i + 1, temp);
}
}
}
//How am I comparing.
public static int compareTo(BingoPlayer player1, BingoPlayer player2){
if(player1.firstName.compareTo(player2.firstName) < 0)
return player1.firstName.compareTo((player2.firstName));
else if(player1.firstName.compareTo(player2.firstName) > 0)
return player1.firstName.compareTo((player2.firstName));
else
if (player1.lastName.compareTo(player2.lastName) < 0)
return player1.lastName.compareTo((player2.lastName));
else if (player1.lastName.compareTo(player2.lastName) > 0)
return player1.lastName.compareTo((player2.lastName));
else
return 0;
}
這是我正在閱讀的txt文件:
50.00
10
James,Smith,50.0
Michael,Smith,50.0
Robert,Smith,50.0
Maria,Garcia,50.0
David,Smith,50.0
Maria,Rodriguez,50.0
Mary,Smith,50.0
Maria,Hernandez,50.0
Maria,Martinez,50.0
James,Johnson,50.0
不允許您使用,但對於任何閱讀者而言:排序是Java內置的,您無需自己實現。
Collections.sort(players,
Comparator.comparing(BingoPlayer::getFirstName)
.thenComparing(BingoPlayer.getLastName));
這將需要您在賓果游戲玩家類中實現吸氣劑,無論如何這都是很好的樣式。 PS我還沒有測試過,所以請原諒我有錯字。
如果列表順序不正確,則交換一遍相鄰的玩家,您將獲得一張通行證。 由於瑪麗亞·加西亞(Maria Garcia)已經在羅伯特·史密斯(Robert Smith)身邊,因此他們將排在他們之前,但是這並不能解決列表中距離較遠的所有球員的情況。 例如,詹姆斯·約翰遜(James Johnson)將不會升任以J開頭的其他球員。
您嘗試做的事情使人想起了稱為冒泡排序的算法,但是要以冒泡排序的方式工作,您需要重復遍歷列表,直到不再進行交換為止。
PS On方法命名:通常,將賓果播放器類與另一個賓果播放器進行比較的賓果播放器類中的實例方法(非靜態方法)稱為compareTo
,而將兩個玩家作為參數並對其進行比較的方法則稱為compare
。 因此,將前者名稱用於后一種方法可能會造成混淆。
您需要使用nested for loop
進行排序
public static void sortPlayers(ArrayList<BingoPlayer> players){
BingoPlayer temp;
int value = 0;
for(int i = 1; i <= players.size()-1; i++)
{
for(int j=i;j>0;j--){
value = compareTo(players.get(j), players.get(j - 1));
if(value < 0){
temp = players.get(j);
players.set(j, players.get(j - 1));
players.set(j - 1, temp);
}
}
}
}
我也優化了您的比較功能:
public static int compareTo(BingoPlayer player1, BingoPlayer player2){
if(player1.firstName.compareTo(player2.firstName) != 0)
return player1.firstName.compareTo((player2.firstName));
else
return player1.lastName.compareTo((player2.lastName));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.