-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);

没有这样的静态字段 Neighborhoods.fisherHill。即使它在那里,fisherHill.vertices也无法访问,因为它具有默认的可访问性

您应该创建一个 Neighborhoods 对象,保持对它的引用并vertices通过 getter 提取该字段:

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

在 Neighborhoods 类中添加一个 gettervertices字段:

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

我建议你买一本 Java 书籍,因为你显然缺乏基本的 Java 和 OOP 知识。

于 2013-07-23T18:59:32.830 回答
0

要回答您的问题:

inPolygon.check(Neighborhoods.fisherHill.vertices);

但是由于某种原因,当我尝试引用fisherHill 对象时出现错误,因为它说找不到它。

在这里,您要进行静态引用,只有当它是静态成员时,才能以这种方式访问​​ fisherHill。

另外,不要在构造函数中创建实例。

于 2013-07-23T19:01:29.197 回答
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 回答