0

请下载以下代码:

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

在代码中,

取什么初始值selX以及selY如何取值?我问这个是因为有一个getRect(selX, selY, selRect)使用这两个变量的函数调用()。那么,在这个函数调用期间,基本上传递了selX和的哪些值?selY

4

1 回答 1

0

它们的初始值将是0,因为它没有在任何地方(至少在这个文件中)设置为其他任何值。据我从您提供的代码中可以看出,只有一个地方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 回答