Java 如何使用比较仪?
我试图写一些代码,我需要使用比较器,但我不知道比较器是什么。你能解释一下为什么我们使用比较器,什么是可比较的吗 我这样做对吗?我试图在顶部使用implements Comparator,但它不起作用 这是我的密码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;
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;