我对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 函数的范围内定义坐标。您需要在类级别定义坐标,以便通过这两种方法访问它。