坚持比较<t> </t>

时间:2013-05-25 09:08:44

标签: java

这是我的第一篇文章。这适用于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;
     }
  }

5 个答案:

答案 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.
 }