访问者:找不到符号错误。

时间:2013-09-09 21:32:43

标签: java

我对java很新,所以请耐心等待。

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

的Mutator:

  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%确定如何执行此操作。

3 个答案:

答案 0 :(得分:3)

您的第一个问题是由于在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] + ")";

你不想这样做,因为它“违反了方法的合同”,因为你没有返回你承诺返回的类型。而是返回声明方法已返回的类型(或声明类型的子类型,因为返回类型允许“协方差” - 但这不适用于您的情况。)

答案 1 :(得分:1)

double [] coordinate = new double [2];

应该在mutator之外声明,因为它的范围仅适用于mutator。

你应该有以下内容:

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

答案 2 :(得分:1)

您在setCoordinate函数的范围内定义坐标。您需要在类级别定义坐标才能在两种方法中访问它。