題目描述

為了進行排序,比較器被用來比較兩個物件。這個題目將會測驗您對Java比較器的認知。



在比賽中有N個玩家。您將會得到他們的名稱和分數,接著您需要以反序的方式排序這些玩家分數。如果兩個玩家的分數一樣,那麼玩家名稱之辭典排序在前的玩家要排在前面的位置。

原題網址

https://www.hackerrank.com/challenges/java-comparator

輸入格式

第一行包含一個整數N,表示玩家的數量。接下來的N行為每個玩家的名稱和分數,用空格字元隔開。

兩個不同的玩家可以用有相同的名稱,玩家的名稱使用小寫英文字母組成。玩家的分數範圍在0到1000之間(包含0和1000)。

輸出格式

排序之後分行輸出每個玩家的名稱和分數,用空格字元隔開。

範例輸入

5
amy 100
david 100
heraldo 50
aakansha 75
aleksa 150

範例輸出

aleksa 150
amy 100
david 100
aakansha 75
heraldo 50

解題概念

程式第28行使用了check物件作為排序陣列的Comparator,因此必須撰寫Checker類別,並實作出Comparator介面的compare方法。

compare方法若傳回值小於0,表示第一個傳入的參數在邏輯上小於第二個傳入的參數;若等於0,表示兩個參數邏輯相等;若大於0,表示第一個傳入的參數在邏輯上大於第二個傳入的參數。所以當第一個玩家的分數比第二個玩家的分數大時,要傳回-1;小於時,要傳回0;若等於的話,要再比較名稱的順序。由於名稱是字串,所以可以直接使用字串的compareTo方法來比較辭典排列順序。

參考答案