Java 无法取消对Comparator compare method()int的引用
我正在做一些作业,我遇到了一个问题 我得到了以下示例代码:Java 无法取消对Comparator compare method()int的引用,java,compiler-errors,int,comparator,dereference,Java,Compiler Errors,Int,Comparator,Dereference,我正在做一些作业,我遇到了一个问题 我得到了以下示例代码: public class PersonNameComparator implements Comparator<Person>{ public int compare(Person p1, Person p2) { int retValue = p1.getName().compareTo(p2.getName()); if (retValue != 0) return retValue;
public class PersonNameComparator implements Comparator<Person>{
public int compare(Person p1, Person p2) {
int retValue = p1.getName().compareTo(p2.getName());
if (retValue != 0)
return retValue;
else if (p1.getAge() < p2.getAge())
return -1;
else if (p1.getAge() > p2.getAge())
return 1;
else
return 0;
}
}
公共类PersonNameComparator实现Comparator{
公共整数比较(人员p1、人员p2){
int retValue=p1.getName().compareTo(p2.getName());
如果(retValue!=0)
返回值;
else if(p1.getAge()p2.getAge())
返回1;
其他的
返回0;
}
}
但是,当我尝试这样做时,会发生以下情况:
public class DVDComparator implements Comparator <DVD> {
public int compare(DVD d1,DVD d2)
{
int stars1 = d1.getNoOfStars().compareTo(d2.getNoOfStars());
//ERROR - int cannot be dereferenced.
公共类dvdparator实现了Comparator{
公共整数比较(DVD d1、DVD d2)
{
int stars1=d1.getNoOfStars().compareTo(d2.getNoOfStars());
//错误-无法取消对int的引用。
有什么想法吗?您不需要调用方法来比较primitive
int
s。事实上,正如您所发现的,您不可能
只需使用普通的
和=
运算符来比较int
s
如果d1
小于d2
,如果d1
大于d2
,如果d1
等于d2
,或者d1
大于d2
,只需确保按照-返回int
值即可
比较其两个参数的顺序。当第一个参数小于、等于或大于第二个参数时,返回负整数、零或正整数
int
作为一个基元不是一个对象,因此没有任何方法。因此,当您尝试调用.compareTo
时,您会得到一个错误
要比较int,可以使用标准比较运算符
<>=
,也可以将其包装在Integer
对象中,并像现在这样使用比较方法。尽管前者是有利的。您会收到此错误消息,因为getNoOfStars()返回原始int,并且没有方法compareTo()为基元类型定义
如果您使用的是Java SE 7,则可以使用如下内容:
public class DVDComparator implements Comparator <DVD> {
public int compare(DVD d1,DVD d2){
return Integer.compare(d1.getNoOfStars(), d2.getNoOfStars());
}
}
公共类dvdparator实现了Comparator{
公共整数比较(DVD d1,DVD d2){
返回Integer.compare(d1.getNoOfStars(),d2.getNoOfStars());
}
}
//如果Person.getName()返回一个字符串,则只需执行以下操作即可//实现:
public class PersonNameComparator implements Comparator<Person>{
public int compare(Person p1, Person p2) {
return p1.getName() - p2.getName(); // It's the ninja way to do it
}
}
公共类PersonNameComparator实现Comparator{
公共整数比较(人员p1、人员p2){
返回p1.getName()-p2.getName();//这是忍者的方法
}
}
您可以通过链接找到上述错误的原因。
您可以使用以下简单易懂的方法之一。(按升序排序)
或
“如果Person.getName()返回一个字符串,那么您可以简单地执行以下操作…”创建编译时错误。
if(d1.getNoOfStars() != d2.getNoOfStars())
return d1.d1.getNoOfStars() - d2.getNoOfStars();
if(d1.getNoOfStars() != d2.getNoOfStars())
return d1.d1.getNoOfStars() > d2.getNoOfStars() ? 1 : -1;