0

次のコードをダウンロードしてください。

http://media.pragprog.com/titles/eband3/code/Sudokuv2/src/org/example/sudoku/PuzzleView.java

コードでは、

どのような初期値selXselY取り、どのように取りますか?これらの2つの変数を使用する関数呼び出し(getRect(selX, selY, selRect))があるので、これを求めています。では、基本的に、この関数呼び出し中に渡されるselXとの値は何ですか?selY

4

1 に答える 1

0

(少なくともこのファイルでは)他の場所に設定されていないため、初期値は0になります。あなたが提供したコードから私が知る限り、場所は1つだけで、selX設定selYされています。

private void select(int x, int y) {
  invalidate(selRect);
  selX = Math.min(Math.max(x, 0), 8); <------ Here
  selY = Math.min(Math.max(y, 0), 8); <------
  getRect(selX, selY, selRect);
  invalidate(selRect);
}

selXメソッドが呼び出されたときにselYのみ設定さselect(int x, int y)れるため、実際にそれらの値を提供することはできません。これは、渡される値が..getRect(selX, selY, selRect)最後selectに設定された値であることを意味します。

このメソッドがどこで呼び出され、どの値がメソッドに渡されるかを知らなければ、質問に答えるのは困難です。しかし、selectメソッドがこれらのメソッド内で呼び出されていることに気づきました

 @Override
public boolean onTouchEvent(MotionEvent event) {
  if (event.getAction() != MotionEvent.ACTION_DOWN)
     return super.onTouchEvent(event);

  select((int) (event.getX() / width),
        (int) (event.getY() / height));
  game.showKeypadOrError(selX, selY);
  Log.d(TAG, "onTouchEvent: x " + selX + ", y " + selY);
  return true;
}


@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
  Log.d(TAG, "onKeyDown: keycode=" + keyCode + ", event="
        + event);
  switch (keyCode) {
  case KeyEvent.KEYCODE_DPAD_UP:
     select(selX, selY - 1);
     break;
  case KeyEvent.KEYCODE_DPAD_DOWN:
     select(selX, selY + 1);
     break;
  case KeyEvent.KEYCODE_DPAD_LEFT:
     select(selX - 1, selY);
     break;
  case KeyEvent.KEYCODE_DPAD_RIGHT:
     select(selX + 1, selY);
     break;

    ...

したがって、ユーザーが画面にタッチするか、矢印キーを使用すると、これらが設定されているように見えます。

ここにブレークポイントを設定して、自分でチェックすることができます

于 2012-06-14T08:25:57.277 に答える