0

ライブ壁紙のオンライン チュートリアルに従っています。この間、私は奇妙な問題に遭遇しました。問題は、以下のコードのコンストラクター MyPoint が、String、int、int を取得しており、String、float、float が必要であると述べていることです。ただし、このコンストラクターの x と y は、ローカルfloatのx と y を参照します。コンストラクターで x または y を選択して確認したところ、ローカルの float x または y が点灯するので、入力として float を取得する必要があります。では、なぜこのエラーが発生するのでしょうか。

@Override
public void onTouchEvent(MotionEvent event) {
if (touchEnabled) {

  float x = event.getX();
  float y = event.getY();
  SurfaceHolder holder = getSurfaceHolder();
  Canvas canvas = null;
  try {
    canvas = holder.lockCanvas();
    if (canvas != null) {
      canvas.drawColor(Color.BLACK);
      circles.clear();
      circles.add(new MyPoint(String.valueOf(circles.size() + 1), x, y));
      drawCircles(canvas, circles);

    }
  } finally {
    if (canvas != null)
      holder.unlockCanvasAndPost(canvas);
  }
  super.onTouchEvent(event);
}
}

編集:

正確なエラーは次のとおりです。「コンストラクター MyPoint(String, float, float) は未定義です」

簡易修正オプション: 「コンストラクター MyPoint(String, int, int) を MyPoint(String, float, float) に変更する」

4

1 に答える 1

2

コンストラクターは何も要求しません。コンストラクターの署名で定義したタイプの値が必要です。正しいタイプの値を指定しないと、存在しないString、float、floatを受け取るコンストラクターを介してMyPointのインスタンスをインスタンス化するように指示されているため、コンパイラーはコードをコンパイルできません。

したがって、エラーは少なくとも「MyPoint」クラスにあります。実際にMyPointコンストラクターがintを必要とする場合は、表示したコードでエラーが発生する可能性もあります。ただし、コードを見ると、floatの可能性が高いようです。

エラーとその解決策は簡単です。

MyPointでは、

public MyPoint(String name, int x, int y);

あなたも持っている必要があります

public MyPoint(String name, float x, float y);

私はあなたが両方を望んでいると仮定しています。xとyをintとして受け取るコンストラクターが必要ない場合は、単に変更します。

于 2012-11-10T15:30:58.407 に答える