[HackerRank]Java的比較器(Java Comparator)

題目描述

為了進行排序,比較器被用來比較兩個物件。這個題目將會測驗您對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方法來比較辭典排列順序。

參考答案

關於作者

Magic Len

各位好,我是Magic Len,是這網站的管理員。我是台灣台中大肚山上人,畢業於台中高工資訊科和台灣科技大學資訊工程系,曾在桃機航警局服役。我熱愛自然也熱愛科學,喜歡和別人分享自己的知識與經驗。如果你有興趣認識我,可以加我的Facebook,並且請註明是從MagicLen來的。

相關文章