-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(...)メソッド内で宣言されているためです。したがって、このメソッドでのみ表示され、他の場所では表示されません。つまり、その範囲はメソッドに限定されます。

この問題の 1 つの解決策は、座標をクラス フィールドにすることですが、これを行うと、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;
}

getCoordinate()または、x と y を保持し、必要に応じて x 変数と y 変数を使用してメソッド内でその場で double 配列オブジェクトを作成することもできます。つまり、

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};
}

2 番目の問題は、getCoordinate()メソッドが double 配列を返すことを宣言していることです。

public double[] getCoordinate() {

しかし、あなたはStringを返そうとしています:

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

返すと約束した型を返していないため、「メソッドの契約を破る」ため、これを行いたくありません。代わりに、メソッドが返すように宣言されている型を返します(または、戻り値の型が「共分散」を許可しているため、宣言された型の子型ですが、これは状況には当てはまりません)。

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

そのスコープはミューテーター専用であるため、ミューテーターの外部で宣言する必要があります。

次のようなものが必要です。

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 に答える