2014-11-11 1 views
1

코드를 게시해야하지만 코드가 상당히 복잡하고 도움이 될 것 같지 않습니다.메서드는 메서드 호출에서 false를 반환하지만 실제로 Android 응용 프로그램에서 호출 수신자에게 true를 반환합니다.

이 방법

public boolean placePlayer(Player player, int startingX, int startingY) 
{ 
    if(checkNotOnBoard(startingX, startingY)) 
     return false; 
    player.setStartingPosition(startingX, startingY); 
    placeStartingTile(startingX, startingY); 
    return true; 
} 

가 checkNotOnBoard()를 호출한다 :

private boolean checkNotOnBoard(int positionX, int positionY) 
{ 
    if(_board.length < 1) 
     return true; 
    if(positionX < 0 || positionY < 0) 
     return true; 
    if((positionX < _board.length) && (positionY < _board[0].length)) 
     return true; 
    return false; 
} 

난 (checkNotOnBoard (startingX, startingY))의 경우에 디버깅 중단 점을 설정은, 상기 방법을 통하여 계단 placePlayer로 돌아 왔을 때 그 메소드의 마지막 줄 (false를 반환)으로 갔지만 반환 값은 true 였고 placePlayer는 반환 false 라인으로 이동했습니다. 내가 가지고있는 유일한 이론은 _board가 재설정된다는 것입니다.하지만 내가 알 수있는 한이 코드 섹션을 실행하는 다른 스레드는 없습니다. 그것은 안드로이드 응용 프로그램이며 HTC One M8 장치와 Android Studio를 사용하는 Nexus 7에서 디버깅 중입니다.

+0

예, 때로는 디버깅이 버그입니다 .... –

+0

이렇게 해보십시오 :'value = checkNotOnBoard (startingX, startingY); (값) false를 반환하면 ' –

+0

시도해보십시오. checkNotOnBoard()가 false를 반환하더라도 value = true입니다. – Rhyeen

답변

3

디버거는 반환 될 때 항상 메서드의 마지막 줄에 도달합니다. 실제로 마지막 문장이 실행 된 것은 아닙니다. 무슨 일이 일어날 수 있습니다 자바 엔진은 마지막 라인에서 스택에서 반환 주소를 팝업입니다.

+0

좋은 생각이지만, 디버그 중에 checkNotOnBoard()에서 검사되는 변수를 검사하고 조건이 true가되어야하는 변수가 없는지 확인했습니다. 또한 단계별로 디버거는 "return true"문 중 하나를 절대 사용하지 않습니다. – Rhyeen

+0

부울이 제대로 함수에서 빠져 나오면 문제가 있다고 Google에보고하십시오. 나는 당신이 bitwise 비교 학습 곡선 문제가있는 것 같아요. && || 사실이 아니라면 모든 안드로이드 앱에 문제가 있기 때문입니다. – danny117

+0

내 마지막 코멘트를 무시하십시오. 맞습니다. (positionX <_board.length) && (positionY <_board [0] .length))가 true를 반환했지만 디버거가 그 말을 건너 뛰고 진실한 말을 되풀이하고 돌아 오는 거짓 진술로 곧장 뛰어 올랐다. 이상한 행동의 종류, 그러나 당신은 그것을 짐작했다! – Rhyeen

관련 문제