Java 如何使用比较仪?

Java 如何使用比较仪?,java,algorithm,comparator,Java,Algorithm,Comparator,我试图写一些代码,我需要使用比较器,但我不知道比较器是什么。你能解释一下为什么我们使用比较器,什么是可比较的吗 我这样做对吗?我试图在顶部使用implements Comparator,但它不起作用 这是我的密码 import java.util.Comparator; public class MedalCount { String name; int goldMedals; int silverMedals; int bronzeMedals; int totalMedals;

我试图写一些代码,我需要使用比较器,但我不知道比较器是什么。你能解释一下为什么我们使用比较器,什么是可比较的吗

我这样做对吗?我试图在顶部使用implements Comparator,但它不起作用

这是我的密码

 import java.util.Comparator;
 public class MedalCount {
 String name;
 int goldMedals;
 int silverMedals;
 int bronzeMedals;
 int totalMedals;


/** 
 * Creates a new MedalCount instance.
 * @param name is the name of the nation
 * @param nGoldMedals is the number of gold medals
 * @param nSilverMedals is the number of silver medals
 * @param nBronzeMedals is the number of bronze medals
 */
public MedalCount(String name, int nGoldMedals, int nSilverMedals,
                  int nBronzeMedals) {
    this.name = name;
    this.goldMedals = nGoldMedals;
    this.silverMedals = nSilverMedals;
    this.bronzeMedals = nBronzeMedals;
    totalMedals = nGoldMedals + nSilverMedals + nBronzeMedals;
}

/** Return a string describing the medal count information for the country */
public String toString() {
    return name + ":\t" + goldMedals + ",\t" + silverMedals + ",\t" 
        + bronzeMedals + ",\t"+ totalMedals;
}

/** 
 * Compare instance of medal count with another. 
 * Nations compared based on number of total medals (descending order).
 */
// TODO: create comparator
public static final Comparator<MedalCount> COMPARATOR = new Comparator<MedalCount>() {
    @Override
    public int compare(MedalCount totalMedals1, MedalCount TotalMedals2) {
        if (totalMedals1.totalMedals >= totalMedals1.totalMedals) {
            return 1;
        } else
            return 0;


    }
}




/** Comparator for sorting by nation name alphabetically */
// TODO: create comparator


/** Comparator for sorting by gold medal count (descending order) */
// TODO: create comparator 
import java.util.Comparator;
公共级医疗帐户{
字符串名;
int金牌;
int银牌;
青铜色金属;
奖牌总数;
/** 
*创建新的MedalCount实例。
*@param name是国家的名称
*@param ngoldames是金牌的数量
*@param nSilverMedals是银牌的数量
*@param nBronzeMedals是铜牌的数量
*/
公共医疗帐户(字符串名称,int-ngoldAcadems,int-nsilvermdals,
int nBronzeMedals){
this.name=名称;
这个。金牌=恩戈尔德奖牌;
这个.silvermendals=nSilverMedals;
this.bronzeMedals=nBronzeMedals;
奖牌总数=恩戈尔德奖牌+nSilverMedals+nBronzeMedals;
}
/**返回一个字符串,描述该国家的奖牌计数信息*/
公共字符串toString(){
返回名称+“:\t”+金牌+“,\t”+银牌+“,\t”
+bronzeMedals+“,\t”+奖牌总数;
}
/** 
*将奖牌计数实例与其他实例进行比较。
*根据奖牌总数进行比较的国家(降序排列)。
*/
//TODO:创建比较器
公共静态最终比较器比较器=新比较器(){
@凌驾
公共整数比较(MedalCount TOTALLMEDALS1、MedalCount TOTALLMEDALS2){
如果(totalMedals1.TotalCarners>=totalMedals1.TotalCarners){
返回1;
}否则
返回0;
}
}
/**按国家名称字母顺序排序的比较器*/
//TODO:创建比较器
/**按金牌计数排序的比较器(降序)*/
//TODO:创建比较器

}

它用于进行相等性检查。假设您有一个属于同一类的对象列表。该类有3个属性,如果所有3位数据都相同,则可以说它们相等。但你们也可以说第二个属性的优先级高于第三个属性,而第一个属性则排在最后。这就是运算符在比较所述对象列表时的行为。然后,您可以对该类的对象列表进行排序


其他背景信息可从中获取。

代码中的错误在这一行:
如果(totalMedals1.TotalAcards>=totalMedals1.TotalAcards)

您需要比较两个对象,您有两次
totalMedals1
,并且从不使用
totalMedals2

在比较方法中,您的条件是错误的,两个对象是相同的。将totalMedals1更改为totalMedals2

当您对对象进行排序时,这些接口会用到,例如您希望使用Collections.sort(ListOfMedal)基于此逻辑,您的对象将被排序

Comparable提供单个排序序列,Comparator提供多个排序序列,请尝试下面的代码

if(totalMedals1.totalAcadems>=totalMedals2.totalAcadems)返回1;
如果(总奖牌数1.1总奖牌数)
if (totalMedals1.totalMedals >= totalMedals2.totalMedals) return 1;
if (totalMedals1.totalMedals <= totalMedals2.totalMedals) return -1;
else return 0;