2016-11-26 47 views
0

我需要在java中为游戏编写一些方法,其中一个方法是int [] findStone。该方法返回一个数组,该数组给出了我正在搜索的元素的坐标。在java中查找元素位置数组

The field looks like this并且被定义如下:private static int[][] gamefield = new int[8][6]; 所以,如果我使用的方法:findStone(3)[0],它应该返回0的x坐标和findStone(3)1,2。这是代码我写的。

private static int[] findStone(int stone) { 

     int[] position = new int[2]; 

     for(int x = 0; x < 8; x++){ 
      for(int y = 0; y < 6; y++) { 

       int a = gamefield[x][y]; 
       int i = x; 
       int j = y; 

       if(a == stone) { 
        position[0] = i; 
        position[1] = j; 
       } 
       break; 
      } 
     } 
     return position; 

    } 

的问题是:该方法只返回x坐标为第一行corectly,对于其他元素它表明我0有人能解释我什么,我做错了什么,我应该改变?请,只是简单的解释。我只是在开始,我没有经验的Java。 谢谢:)

+1

因为你使用break for y循环,它只是运行一次。 –

+0

你能清理你想要完成的工作吗? –

+0

除了在错误的地方“break”之外,你还应该同时打破两个循环,否则你的代码会继续保留其余的x值(这至少会浪费cpu周期):参见[带标签的中断] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html)(该页面的后半部分)或考虑立即返回位置而不是中断。 – zapl

回答

0

您可能打算将您的break子句放入if块中。您现在的方式,break关键字不起作用。它只是打破了内部循环(使用y变量),但由于这段代码无论如何都会结束,因此它什么也不做。

您正在搜索地图上的单个点,因此当您找到石头位置时,您可以立即将其返回,因为没有什么可做的了。

此外,你不需要额外的变量,a,ij。使用它们并没有错,但代码看起来更清晰,没有它们就更简洁。看看这个代码:

private static int[] findStone(int stone) { 

    int[] position = new int[2]; 

    for (int x = 0; x < 8; x++) { 
     for (int y = 0; y < 6; y++) { 

      if (gamefield[x][y] == stone) { 
       position[0] = x; 
       position[1] = y; 

       return position; 
      } 
     } 
    } 
    return null; // if there's no given stone 
} 
+0

现在它的工作。谢谢<3 – Anna

+0

写下你的游戏祝你好运! – misko321