访问器:找不到符号错误



我对java相当陌生,所以请耐心等待。

我在坐标数组中使用 x 和 y 变量。

突变器:

  public void setCoordinate (double _x, double _y) {
     x = _x;
     y = _y;
     double [] coordinate = new double [2];
     coordinate[0] = x;
     coordinate[1] = y;
  }

我遇到问题的部分是访问器:

   public double[] getCoordinate() {
     return "(" + coordinate[0] + ", " + coordinate[1] + ")";
   }

我收到"符号:变量坐标,位置:类地址,错误:找不到符号"错误。知道为什么我会收到此错误吗?我以相同的方式编写其他访问器,我没有遇到任何问题。


也。。。如何在另一种方法中分别调用每个变量(x 和 y)?a1.getCoordinate() 返回两个值 (x, y),但我想稍后在等式中使用 x 和 y,我不是 100% 确定如何做到这一点。

您的第一个问题是由于在 setCoordinate(...) 方法内部声明了坐标变量,因此它仅在此方法中可见,在其他任何地方都不可见。换句话说,其范围仅限于方法。

这个问题的一个解决方案是使坐标成为类字段,但是如果你这样做,那么你将需要摆脱x和y类字段,因为它们将是不必要的重复变量,如果x和y以某种方式与坐标不同步,可能会导致混淆。

private double[] coordinate;
public void setCoordinate(double x, double y) {
   coordinate = new double[]{x, y};  // coordinate is a class field
}
public double[] getCoordinate() { 
  coordinate;
}
或者,您可以保留 x 和 y

,并在需要时使用 x 和 y 变量在 getCoordinate() 方法中动态创建一个双数组对象。

private double x;
private double y;
public void setCoordinate(double x, double y) {
   this.x = x;  // x is a class field
   this.y = y;  // y is a class field
}
public double[] getCoordinate() { 
  return new double[] {x, y};
}

你的第二个问题是getCoordinate()方法声明它将返回一个双精度数组:

public double[] getCoordinate() {

但您正在尝试返回一个字符串

  return "(" + coordinate[0] + ", " + coordinate[1] + ")";

不想这样做,因为它"破坏了方法的协定",因为您没有返回您承诺返回的类型。而是返回方法已声明为返回的类型(或声明类型的子类型,因为返回类型允许"协方差" - 但这不适用于您的情况)。

double [] coordinate = new double [2];

应该在突变器之外声明,因为它的范围仅适用于该突变子。

您应该具有以下内容:

class SomeClass{
    double [] coordinate = new double [2];
    int x, y;
    public double[] getCoordinate;
    //methods
 }

您是在 setCoordinate 函数的范围内定义坐标。您需要在类级别定义坐标,以便通过这两种方法访问它。

最新更新