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と、同じ名前のクラスではなく、任意の型になります。

すべてのクラスにアクセス可能な memberがある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;
   }
 }

type を返すメソッドを宣言するときは、常に typeを返すint必要があるため、このコードはコンパイルされません。現時点では、が より小さい場合にのみ値を返します。すべての不測の事態をカバーするために、他のいくつかのケースで追加する必要があります。intfirst.asecond.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

できるはずです。あなたのエラーは、代替の return ステートメントがないことだと思います。比較メソッドの if の代わりに、次のコードを使用してみてください。

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