2

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

5 回答 5

5
public class CompareIpaddress <IPaddress >implements Comparator<IPaddress>

您制作IPaddress了 , 的类型参数CompareIpaddress,因此它是任何类型,而不是同名的类。

由于并非每个类都有可访问的成员a,因此编译器无法找到该符号。

public class CompareIpaddress implements Comparator<IPaddress>

是正确的方法。

(对于其他情况,您还需要返回一个值,但我想您已经为这个问题减少了这个值。)

于 2013-05-25T09:17:23.243 回答
2

删除中的类型参数IPaddress。这样,您就可以使用类型参数public class CompareIpaddress <IPaddress> implements Comparator<IPaddress>来隐藏类名。IPaddress

实际上,您根本不需要类型参数。将其更改为public class CompareIpaddress implements Comparator<IPaddress>,一切都很好。

于 2013-05-25T09:17:32.027 回答
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;
}
于 2013-05-25T09:15:41.540 回答
1

你应该使用

public class CompareIpaddress implements Comparator<IPaddress>

因为你真的不需要类型参数

如果您使用 IDE,您可能会收到一些警告。

于 2013-05-25T09:26:55.367 回答
0

你应该能够。我认为您的错误是您没有备用返回语句。尝试使用比较方法中的 if 而不是只使用代码:

 public int compare (IPaddress first, IPaddress second)
 {
   return first.a - second.a; //Returns 0 if equal.
 }
于 2013-05-25T09:17:21.593 回答