我对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%确定如何执行此操作。
答案 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函数的范围内定义坐标。您需要在类级别定义坐标才能在两种方法中访问它。