2017-03-25 7 views
-1

私は騎士のツアープログラムを作ろうとしていますが、ボードの2次元配列の行/ボードの周りを移動します。しかし、私がしようとするすべては、1を引く代わりに-1にボードを設定しようとしています。2次元配列の行/列から減算することはできません。[Java]

問題が何であるかを説明するのは難しいですが、誰かがここで私を助けることができたら、コード:この時点で出てくる

public class Knight1 { 

    public static void main(String[] args) { 
     int board[][] = new int[8][8]; 
     int horizontal[] = new int[8]; 
     int vertical[] = new int[8]; 

     horizontal[0] = 2; 
     horizontal[1] = 1; 
     horizontal[2] = -1; 
     horizontal[3] = -2; 
     horizontal[4] = -2; 
     horizontal[5] = -1; 
     horizontal[6] = 1; 
     horizontal[7] = 2; 

     vertical[0] = -1; 
     vertical[1] = -2; 
     vertical[2] = -2; 
     vertical[3] = -1; 
     vertical[4] = 1; 
     vertical[5] = 2; 
     vertical[6] = 2; 
     vertical[7] = 1; 
     int move = 1; 

     int moveNumber = 0; 
     int currentRow = 0; 
     int currentCol = 0; 
     int counter = 1; 

     while (moveNumber != 7) { 
      currentRow += vertical[moveNumber]; 
      currentCol += horizontal[moveNumber]; 
      board[currentRow][currentCol] = counter; 
      moveNumber++; 
      counter++; 
     } 

     for (int i = 0; i < 8; i++) { 
      for (int j = 0; j < 8; j++) { 
       System.out.print(board[i][j] + " "); 
      } 
      System.out.println(); 
     } 
    } 
} 
+0

currentRow + = vertical [moveNumber]; currentRowは-1に等しい。そして、あなたは[currentRow] [currentCol] =カウンターに乗りたいです。しかしcurrentRowは-1なので、これはできません。あなたは何をしたいのか分かりませんでしたか? – ssorfonos

+0

つまり、Arrayインデックス値が** 0 **未満であるか、Arrayインデックス値がArray -1に含まれる要素数より大きくなることはありません。 – DevilsHnd

+0

サイドノート。 'int [] vertical = new int [] { - 1、-2、... 1};' – Justas

答えて

0

問題:

int currentRow = 0; 
    int currentCol = 0; 

あなたはcurrentRowのに変数

0を -1を追加しようとしています
vertical[0] = -1; 
    currentRow += vertical[moveNumber]; 

ナイトのツアーの問題とあなたのコードを見てください。私が両者を正しく理解していれば、ROW 7COLUMN 4から始めるべきです。

だからこれだけ2つの変数を変更します。

int currentRow = 7; 
    int currentCol = 4; 

この結果をコンパイルしようとしている: あなたがする必要はありません。私はまた、あなたの主な方法を少し編集し

0 0 0 0 0 0 0 0 
0 0 0 0 4 0 0 0 
0 0 5 0 0 0 3 0 
0 0 0 0 0 0 0 0 
0 6 0 0 0 0 0 2 
0 0 0 0 0 0 0 0 
0 0 7 0 0 0 1 0 
0 0 0 0 0 0 0 0 

水平および垂直アレイ。あなたは多次元配列でそれを行うことができます。

public static void main(String[] args) { 

     int board[][] = new int[8][8]; 
     int moveNumber = 0; 
     int currentRow = 7; 
     int currentCol = 4; 
     int counter = 1; 

     //moves[moveNumber][0] = columnValues; 
     //moves[moveNumber][1] = rowValues; 
     int moves[][] = new int[][]{{ 2,-1}, 
            { 1,-2}, 
            {-1,-2}, 
            {-2,-1}, 
            {-2, 1}, 
            {-1, 2}, 
            { 1, 2}, 
            { 2, 1}}; 

     while (moveNumber != 7) { 
      currentCol += moves[moveNumber][0]; 
      currentRow += moves[moveNumber][1]; 
      board[currentRow][currentCol] = counter; 
      moveNumber++; 
      counter++; 
     } 

     for (int i = 0; i < 8; i++) { 
      for (int j = 0; j < 8; j++) 
       System.out.print(board[i][j] + " "); 
      System.out.println(); 
     } 
    } 
+1

「マジックナンバー」を使用した副作用は悪い習慣であり、常にループしているものの長さやサイズを参照してください。 – Mikenno

+1

はい、そうですが、このコードをさらに改善することができます。 ROW_INDEXやCOLUMN_INDEXなどの定数を定義できます。 – ssorfonos

+0

ありがとう、これは私の問題の1つを解決します。そこに私は例えば0,0から始まる板の周りを動くことができる方法はありますか?騎士のように(この場合)は一度四角形を一度訪れることになっています。あなたが与えた編集で遊んだ後、私はそうすることができません。これについての考えは? – swen

関連する問題