-2

私は Java での開発の初心者で、クラス内の (別のクラスの) オブジェクトを参照する際に少し問題が発生しました。

これは、ファイル「Neighborhoods.java」からオブジェクトを作成するために使用したコードです。

public class Neighborhoods {

    // variables
    String name;
    int vertices;
    double[] latCoords;
    double[] longCoords;

    public Neighborhoods() {
        Neighborhoods fisherHill = new Neighborhoods();
        fisherHill.name = "Fisher Hill";
        fisherHill.vertices = 4;
        fisherHill.latCoords = new double[] {42.331672, 42.326342, 42.334464, 42.335733};
        fisherHill.longCoords = new double[] {-71.131277, -71.143036, -71.148615, -71.141062};
    }
}

次に、別の異なるクラス (「inPolygon」と呼ばれる) から関数を呼び出すときに、作成したオブジェクト「fisherHill」(Neighborhoods クラスから) をメイン クラスで使用しようとしました。

inPolygon.check(Neighborhoods.fisherHill.vertices);

しかし、何らかの理由で、fisherHill オブジェクトを参照しようとすると、見つからないというエラーが表示されます。

ここでばかげた間違いを犯していることは知っていますが、それが何であるかはわかりません。コードの説明に間違った用語を使用した場合は申し訳ありません。どんな助けや提案も大歓迎です。

4

4 に答える 4

1

そこにはいくつかの問題があります:

Neighborhoods fisherHill = new Neighborhoods();

コンストラクター内で同じクラスの新しいオブジェクトをインスタンス化するのはなぜですか? このクラスの新しいオブジェクトがすでに作成されようとしているため、コンストラクターが呼び出されます。この新しいオブジェクトは として参照されthisます。これは、新しいオブジェクトのクラス フィールドを初期化する適切な方法です。

this.name = "Fisher Hill";
this.vertices = 4;
this.latCoords = new double[] {42.331672, 42.326342, 42.334464, 42.335733};
this.longCoords = new double[] {-71.131277, -71.143036, -71.148615, -71.141062};

他の回答でthisわかるように、省略できます。私は個人的にそれを置くことを好みます、それは私にとってコードをより読みやすくします。

inPolygon.check(Neighborhoods.fisherHill.vertices);

そのような static フィールド はありませんNeighborhoods.fisherHill。そこにあったとしても、デフォルトのアクセシビリティfisherHill.verticesがあるためアクセスできません。

Neighborhoods オブジェクトを作成し、それへの参照を保持verticesし、getter を介してフィールドを抽出する必要があります。

final Neighborhoods n = new Neighborhoods();
final int numVertices = n.getVertices();
inPolygon.check(numVertices);

Neighborhoods クラスにverticesフィールドのゲッターを追加します。

public int getVertices() {
    return this.vertices;
}

基本的な Java と OOP の知識が明らかに不足しているため、Java の本を入手することをお勧めします。

于 2013-07-23T18:59:32.830 に答える
0

コンストラクターに再帰呼び出しがあります。

問題のある行:

Neighborhoods fisherHill = new Neighborhoods();
于 2013-07-23T18:57:43.307 に答える
0

おそらく次のようなものになるはずです

public class Neighborhoods {

  // variables
  private final String name;
  private final int vertices;
  private final double[] latCoords;
  private final double[] longCoords;

  public Neighborhoods() {
    name = "Fisher Hill";
    vertices = 4;
    latCoords = new double[] {42.331672, 42.326342, 42.334464, 42.335733};
    longCoords = new double[] {-71.131277, -71.143036, -71.148615, -71.141062};
  }

  public int getVertices() {
     return vertices;
  }

  //and some more getters
}

そして、他のクラスの呼び出しで

inPolygon.check(new Neighborhoods().getVertices());
于 2013-07-23T18:58:10.057 に答える