这是我的第一篇文章。这适用于Java 7。
有人可以告诉我为什么我无法访问CompareIpaddress类中的“first.a”吗? (我不确定为什么SOF不允许我发布这个,除非我输入更多东西......)这是否足够填充?
谢谢, 戈登
import java.util.Comparator;
import java.util.*; // just in case i need it.
import java.util.TreeSet;
public class CompareIpaddress <IPaddress >implements Comparator<IPaddress>
{
/************************************************compare()**/
public int compare (IPaddress first, IPaddress second)
{
if( first.a < second.a )
{
return -1;
}
}
}
import java.util.Comparator;
import java.util.*;
import java.util.TreeSet;
public class IPaddress
{
public int a, b, c, d;
IPaddress (int a, int b, int c, int d)
{
this.a=a;
this.b=b;
this.c=c;
this.d=d;
}
public int getA()
{
return a;
}
}
答案 0 :(得分:4)
public class CompareIpaddress <IPaddress >implements Comparator<IPaddress>
您使IPaddress
成为CompareIpaddress
的类型参数,因此这是任何类型,而不是同名的类。
由于并非每个类都有可访问的成员a
,因此编译器无法找到该符号。
public class CompareIpaddress implements Comparator<IPaddress>
是正确的方法。
(你还需要为其他案例返回一个值,但我想你已经把这个问题减少了。)
答案 1 :(得分:2)
删除IPaddress
中的类型参数public class CompareIpaddress <IPaddress> implements Comparator<IPaddress>
。通过这种方式,您可以使用类型参数为类名IPaddress
着色。
实际上你根本不需要类型参数。
将其更改为public class CompareIpaddress implements Comparator<IPaddress>
,一切都很好。
答案 2 :(得分:1)
public int compare (IPaddress first, IPaddress second)
{
if( first.a < second.a )
{
return -1;
}
}
此代码无法编译,因为当您声明返回类型int
的方法时,它必须始终返回类型int
。目前,只有在first.a
小于second.a
时,它才会返回一个值。您应该添加其他一些案例,以涵盖所有可能性:
if(first.a < second.a)
{
return -1;
}
else if(first.a > second.a)
{
return 1;
}
else
{
return 0;
}
答案 3 :(得分:1)
你应该使用
public class CompareIpaddress implements Comparator<IPaddress>
因为你真的不需要类型参数
如果您使用IDE,您可能会收到一些警告。
答案 4 :(得分:0)
你应该能够。我认为你的错误是你没有备用的return语句。尝试使用比较方法中的if而不是使用代码:
public int compare (IPaddress first, IPaddress second)
{
return first.a - second.a; //Returns 0 if equal.
}