2017-04-23 138 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