2016-06-13 9 views
0

私はMinesweeperのゲームに取り組んでおり、昨日の朝まで正確に見えます。私自身は解決できない問題があります。 状況は、次のようになります。私は9は爆弾を意味し、0は、自由空間を意味生成されたすべての値、とマインスイーパのフィールドを生成した1で、2二次元配列を得ました。それをフィールドと呼ぶことができます。これは整数配列です。基本的に9x9フィールドです。コードの適切な作業のためのフレームとして+1行のゼロがあります。それ以外の場合は、コード実行時にOutOfBoundsErrorを返します。 例:Java-多次元配列での作業中に不正な値を返します

00000000000 0 
00000019100 1 
01110011100 2 
02910000000 3 
09321110000 4 
02911910000 5 
01111111110 6 
01110112910 7 
02920192110 8 
02920111000 9 
01110000000 10 
00000000000 11 

私の二番目の配列は文字列配列user_fieldであり、それは(すべてnullフィールドは.に置き換えられます)空白になって、ここではコマンドのユーザーを入力して.フィールドを開きます。

........... 1 
........... 2 
........... 3 
........... 4 
........... 5 
........... 6 
........... 7 
........... 8 
........... 9 
........... 10 
........... 11 
........... 12 

それは、フィールド、およびそれらの周りのすべての値から開始すべて0の出力を私にする必要があります。例:

nnn 1 
n0n 2 
nnn 3 

私はそれを呼び出すために、このコードを使用します。

 for (int i = 1; i < field_h-2; i++) { 
      for (int j = 1; j < field_w-2; j++) { 
       if (user_field[i][j]==null) { 
        user_field[i][j]="."; 
       } 
       if(field[i][j]==0) { 
        for(int k = 0; k< 3; k++) { 
         for (int n = 0; n< 3; n++) { 
          user_field[i-1+k][j-1+n] = String.valueOf(field[i-1+k][j-1+n]); 
          //System.out.print(String.valueOf(field[i-1+k][j-1+n])); 
         } 
        } 
       } 
       System.out.print(user_field[i][j]); 
      } 
      System.out.println(" "+ (i)); 
     } 

しかし、現実には、それは(Xは何も-meansない、n個 -means値を。)出力:

xxx 1 
x0n 2 
nnn 3 

私はこのようなことが起こる理由はありません。誰かが私を助けることができますか?私はJavaでそれほど経験はありません、多分私は何かを理解していません。

+0

[mcve]を入力すると手助けするのが簡単になります。 –

+0

また、あなたのコメントが何を意味するのかは明らかではありませんが、あなたがそれを望んでいないとあなたの投稿を編集することができます... –

答えて

0

2番目の行(x0n)を考慮して問題を説明しますが、私の推論は前と次の行に自然に適用されます。

あなたのプログラムがこのん:

  1. もともとuser_fieldxxxあり、そしてfieldn0n(のは、それが102だとしましょう)です。

  2. fieldの最初の要素を見てください。 1であり、0ではないため、user_fieldに変更を加えないでください。その後すぐにuser_fieldの最初の要素を印刷します。その時点ではまだxです。今のところあなたはxを印刷しました。

  3. fieldの2番目の要素に移動します。ゼロであるため、user_fieldの最初と3番目の要素を更新します。しかし、その時点ではすでにuser_fieldという最初の要素を印刷しています。今field102user_field102ですが、すでにxを印刷しています。今すぐuser_fieldの2番目の要素を印刷するので、最後にx0という印刷が行われます。

  4. fieldの3番目の要素に移動します。 0ではなく、変更を加えません。 user_fieldの3番目の要素を印刷します。これは今度は2なので、最終出力はx02、目的の出力は102です。

修正するには、ループを2つに分割します。最初のループでuser_fieldを計算し、2番目のループでそれを印刷します。

for (int i = 1; i < field_h-2; i++) { 
     for (int j = 1; j < field_w-2; j++) { 
      if (user_field[i][j]==null) { 
       user_field[i][j]="."; 
      } 
      if(field[i][j]==0) { 
       for(int k = 0; k< 3; k++) { 
        for (int n = 0; n< 3; n++) { 
         user_field[i-1+k][j-1+n] = String.valueOf(field[i-1+k][j-1+n]); 
         //System.out.print(String.valueOf(field[i-1+k][j-1+n])); 
        } 
       } 
      } 
     } 
    } 

    for (int i = 1; i < field_h-2; i++) { 
     for (int j = 1; j < field_w-2; j++) { 
      System.out.print(user_field[i][j]); 
     } 
     System.out.println(" "+ (i)); 
    } 
+0

ありがとう!完璧に働いた。頑張って! –

関連する問題