2017-04-23 85 views
-2

我正在創建一個迷宮遊戲作爲大學評估的一部分。我打算通過迷宮板循環,直到找到字符'&',然後返回播放器的y座標(我已經完成了獲取x位置並獲得相同錯誤的相同方法)我的符號迷失在迷宮中

錯誤我越來越:

MazeGame.java:133: error: cannot find symbol 
return i; 
^ 
symbol: variable i 
location: class MazeGame 
1 error 

而且,我的代碼,

public static int getCurrentYPosition() { 
    for (int i = 0; i < numberOfRows; i++) { 
     for (int n = 0; n < board[i].length; n++) { 
      if (board[i][n] == '&') { 
       break; 
      } 
     } 
    } 
    return i; 
} 

爲什麼不能找到符號?

+0

對不起,這不是StackOverflow的是如何工作的。形式問題_「這是我的代碼,它不起作用,有人能幫我弄清楚」_被認爲是無關緊要的。請訪問[幫助]並閱讀[問]獲取更多信息,尤其是閱讀[爲什麼是「有人可以幫助我?」不是一個實際問題?](http://meta.stackoverflow.com/q/284236/18157 ) –

+1

您需要閱讀Java中作用域的工作原理。 –

回答

1

i不在範圍內循環。 return當你找到它,並處理的情況下,找不到字符與哨兵(如-1)。而且,作爲書面break將僅適用於循環(所以如果我們i通過增加的範圍,例如可見的)那麼您需要在那之前returnnumberOfRowsi增量。所以,我覺得你真的想要像

public static int getCurrentYPosition() { 
    for (int i = 0; i < numberOfRows; i++) { 
     for (int n = 0; n < board[i].length; n++) { 
      if (board[i][n] == '&') { 
       return i; 
      } 
     } 
    } 
    return -1; 
} 

請注意,你也可以用for-each循環寫它像

for (int i = 0; i < numberOfRows; i++) { 
    for (char ch : board[i]) { 
     if (ch == '&') { 
      return i; 
     } 
    } 
} 
return -1; 
+0

你知道這個代碼與原始代碼不同,對吧?原始代碼中的'break'只打破了內部循環(儘管這實際上沒有意義),並且如果'i'仍然在範圍內(如可能意圖的那樣),return語句將返回'numberOfRows',而不是'-1'。我同意你的代碼更有意義,但你應該在答案中提及對邏輯的改變。仍然是+1。 – Andreas