2016-09-11 10 views
-1

に重ならない私は、このプログラムは、戦艦「作品」の完全な戦艦場を作るために作っていたと私はこのようなボード上の最長部分置くコード作られた:これは完璧に動作は、なぜこれらの作品は

public void fieldFiller5(){ 
    int horizontalOrVertical = random.nextInt(2); 
    int starth = random.nextInt(6); // the int has to be below 5 
    int startv = random.nextInt(6); 

    for (int j = 0; j<10; j++){ 
     for(int k = 0; k<10;k++){ 
      field[j][k]=false; 
    } 
     if (horizontalOrVertical==0){ 
      for(int i =0; i<5; i++){ 
      field[starth+i][startv]= true; // makes a line of 5 true 
      } 
     } 
     else{ 
      for(int i =0; i<5; i++){ 
      field[starth][startv+i]= true; // makes a line of 5 true 
      }  
     } 
    } 
} 

をしかし、今、私はフィールドに2番目のピースを入れたいですが、私はそれを最初のピースに重なりたいので、私はすべてのスペースが偽であるかどうかをチェックするチェックメカニズムを作っていません。ループを再開しても、必ずしもうまくいくわけではありません。次のようになります。

public void fieldFiller4(){ 

    for (int k=0; k<2; k++){ 

     int horizontalOrVertical = random.nextInt(2); 
     int starth = random.nextInt(7); // the int has to be below 6 
     int startv = random.nextInt(7); 

     if (horizontalOrVertical==0){ 
      for(int i=0; i<4; i++){ 
       if ((field[startv+i][starth]==true)){ 
       starth=random.nextInt(7); 
       startv=random.nextInt(7); 
       i=0; 
       } 


      } 
      for(int i =0; i<4; i++){ 
      field[starth+i][startv]= true; // makes a line of 4 true 
      } 
     } 

     if (horizontalOrVertical==1){ 
      for(int i=0; i<4; i++){ 
       if ((field[startv][starth+i]==true)){ 
       starth=random.nextInt(7); 
       startv=random.nextInt(7); 
        i=0; 
       } 


      } 
      for(int i =0; i<4; i++){ 
       field[starth][startv+i]= true; // makes a line of 4 true 
      } 
     } 
    } 
} 

public void fieldPrinter(){ 
     String row = new String(""); 
     for (int i = 0; i<10; i++){ 
      row = ""; 
      for(int k = 0; k<10;k++){ 
       if (field[i][k]==true){ 
        row = row+ "X"; 
       } 
       else{ 
        row = row+"O"; 
       } 

      } 
      System.out.println(row); 
     } 
    } 
} 

そして、それは多少このように、正常に見える時代の最も:

OOOOOOOOOO 
OXXXXXOOOO 
OOOOOOOOOO 
OOXOOOOOOO 
OOXOOOOOOO 
OOXOOOOOOO 
OOXOOOXOOO 
OOOOOOXOOO 
OOOOOOXOOO 
OOOOOOXOOO 

を時にはそれだけで二番目を行い、1

そして、私はそれを印刷する印刷方法を作りました

OOOOOXOOOO 
OOOOOXOOOO 
OOXOOXOOOO 
OOXOOXOOOO 
OOXOOOOOOO 
OOXOOOOOOO 
OOXOOOOOOO 
OOXOOOOOOO 
OOOOOOOOOO 
OOOOOOOOOO 

、時には彼らが重なって、それは次のようになります:

時、それはこのようになります
OOOOOOXOOO 
OOXOOOXOOO 
OOXOOOXOOO 
OOXOOXXXXO 
OOXOOOOOOO 
OOXOOOOOOO 
OOOOOOOOOO 
OOOOOOOOOO 
OOOOOOOOOO 
OOOOOOOOOO 

プログラムがこのように動作している理由を考えることはできません。だれでも助けてくれますか?

答えて

2

コードのいくつかの箇所では、 "h"と "v"が混在しています。具体的には、衝突を確認するときはfield[startv][starth]、正方形を埋めたときはfield[starth][startv]と表示されます。

+0

ありがとう、私はそれを見落としました。私は自分自身を考え出すことができなかったと思う、私は失読症がある。私はそれを変更し、今それは動作します:D –

関連する問題