-1

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

4

3 回答 3

3

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

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

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,并getCoordinate()在需要时使用您的 x 和 y 变量在方法内部动态创建一个双数组对象。IE,

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() {

但你试图返回一个String

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

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

于 2013-09-09T21:34:37.603 回答
1
double [] coordinate = new double [2];

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

你应该有如下的东西:

class SomeClass{
    double [] coordinate = new double [2];
    int x, y;
    public double[] getCoordinate;
    //methods
 }
于 2013-09-09T21:34:51.060 回答
1

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

于 2013-09-09T21:34:57.363 回答