2016-11-26 10 views
0

私はJavaでゲームのいくつかのメソッドを書く必要があり、そのうちの1つは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; 

    } 

問題がある:メソッドが唯一のそれは私が0誰かが私が間違っていたものを私に説明してもらえ示し、他の要素に対して、corectly最初の行のx座標を返し、私は変更すべきか?簡単な説明だけをお願いします。私は冒頭にいるだけで、Javaでの経験はありません。 ありがとうございました:)

+1

yループのためにbreakを使うので、それは単なる1回だけ実行されます。 –

+0

達成しようとしていることをクリアすることはできますか? –

+0

間違った場所で 'break'のほかに、同時に両方のループから抜け出すべきです、あるいはあなたのコードは残りのx値(少なくともCPUの浪費である)のために使い続けます:[break with label] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html)(そのページの下半分)、または「位置を返す」ことを検討してください。 – zapl

答えて

0

break句をifブロックに入れることを意図しています。現在の方法では、breakキーワードは効果がありません。それはちょうど内部ループ(yと)を破るだけですが、このコードブロックはここで終わるので、何もしません。

マップ上の1つのポイントを検索しているため、石の位置を見つけたらすぐに返すことができます。何もする必要はありません。

さらに、追加の変数a,iおよびjは必要ありません。それらを使用することは間違いではありませんが、コードは明確に見え、それがなければ簡潔になります。このコードを見てください:

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

関連する問題