2014-06-07 1 views
0

나는 입력 좌표 매개 변수에 따라 문자열의 2 차원 배열에서 문자 요소를 반환하는 메서드가 있습니다.2 차원 배열에서 문자 요소를 반환

public BattleShips(GameConfiguration config, Player player1, Player player2) { 
    this.player1 = player1; 
    this.player2 = player2; 
    this.config = config; 
    this.myBoardPlayer1= new char[20][20]; 
    this.myBoardPlayer2= new char[20][20]; 
} 
protected char getCellState(int player, int x, int y) { 
    if (isValidCoordinate(x,y) == true){ 
     if (player == 0){ 
      return this.myBoardPlayer1[x][y]; 
     } 
     else if (player == 1){ 
      return this.myBoardPlayer2[x][y]; 
     } 
    } 
    else { 
     return (char) -1; 
    } 
} 

문제 나 문자 등의 인스턴스 변수 myBoardPlayer1 및 myBoardPlayer2를 초기화 한 경우에도 저있어서 getCellState()을 말하고 이클립스 상기 코드 결과 char 유형의 결과를 반환하지 않은 것 인 [20] [20] 생성자에서.

그럼 내 질문 : 배열의 문자 요소에 대한 반환 방법이 맞습니까? 또는 this.myBoardPlayer1 [x] [y]가 문자로 간주되지 않습니까? getCellState()가 this.myBoardPlayer1 [x] [y]에있는 문자 값을 반환하도록 코드를 어떻게 바꿀 수 있습니까?

+0

반환 값은 보호 된 "char"getCellState에 따라 달라지며 인스턴스 변수가 아닙니다. 따라서 모든 if와 else에서 'char'를 반환해야합니다. – Raj

답변

1

문제는 컴파일러가 getCellState()일 때 항상이 반환한다는 것을 증명할 수 없다는 것입니다. 오해의 소지가있는 컴파일러 오류가 발생합니다.

당신player0 또는 1 중 하나 isValidCoordinate() 경우 반환 true 것을 알고 있습니다 만, 컴파일러는 당신의 마음을 읽을 수 없습니다. 그것은 당신이 뭔가를 반환하는 방법이 모든 경우에 무언가를 반환 보장해야하기 때문에과에, isValidCoordinate() 반환 trueplayer0 또는 1하지 않고 불평하는 경우에 반환 할 것을 말했다하지 않았 음을 통지 컴파일러, 메서드를 반환하도록 정의되지 않은 경우도 있습니다.

그래서 당신은 else if 일반 else에, 또는 isValidCoordinate() 반환 trueplayer0 또는 1없는 경우 무슨 일이 일어날 지 정의하는 또 다른 else 경우를 추가 변경할 수 있습니다.