2016-09-28 21 views
1

私は、ポイント(行と列またはxとy)を入力するように指示するコードを要求するJava割り当てを持っており、チェスの騎士のすべての可能な移動を出力します。文がばかげた出力を出力する場合

{[[email protected],[[email protected]} 

{[[email protected],[[email protected]} 

{[[email protected],[[email protected]} 

{[[email protected],[[email protected]} 

{[[email protected],[[email protected]} 

{[[email protected],[[email protected]} 

{[[email protected],[[email protected]} 

それが意味をなすのdoesntと私は私のコードで間違って何をしたか知らない:私は、NetBeansでこれを実行すると

package datastructureass1; 
import java.util.Scanner; 

public class DataStructureAss1 { 

    public static void main(String[] args) { 
     Scanner cin = new Scanner (System.in); 

     int knight[][]= new int [7][7]; 

        System.out.println("Please enter the knight's position starting with rows followed by columns"); 
         int i=cin.nextInt();  
         int j=cin.nextInt(); 

         i=i+2; 
         j=j+1; 
         if (i<=8&&j<=8) 

          System.out.println("{"+knight[i]+","+knight[j]+"}"); 

         i= i+2; 
         j=j-1; 
         if (i<=8&&j<=8); 
          System.out.println("{"+knight[i]+","+knight[j]+"}"); 

         i= i-2; 
         j=j+1; 
         if (i<=8&&j<=8); 
          System.out.println("{"+knight[i]+","+knight[j]+"}"); 
         i= i-2; 
         j=j-1; 
         if (i<=8&&j<=8); 
          System.out.println("{"+knight[i]+","+knight[j]+"}"); 

         i= i+1; 
         j=j+2; 
         if (i<=8&&j<=8); 
          System.out.println("{"+knight[i]+","+knight[j]+"}"); 
         i= i+1; 
         j=j-2; 
         if (i<=8&&j<=8); 
          System.out.println("{"+knight[i]+","+knight[j]+"}"); 
         i= i-1; 
         j=j+2; 
         if (i<=8&&j<=8); 
          System.out.println("{"+knight[i]+","+knight[j]+"}");  
         i= i-1; 
         j=j-2; 
         if (i<=8&&j<=8); 
          System.out.println("{"+knight[i]+","+knight[j]+"}"); 

    } 

       } 

は、それは私にこのような出力を提供します!唯一の条件

+2

あなたは配列インデックスの代わりに配列を指しています.... use knight [i] [j] – Rishi

+0

これはどのようにupvoteを持っていますか? – shmosel

答えて

0

あなたはif文のために括弧でiとjのための加減算を囲む必要があり、それは、配列の配列は次のとおりです。

その配列内の位置をアドレス指定するとき、あなたはその位置に 配列を取得
[ 
    [ 0,1,2,3 ...], 
    [...], 
    [...] 
] 

、すなわち

int[] knightAtI = knight[i]; 

int[]配列がオブジェクトであるため、toString()メソッドは参照文字列を返します。

ですから、両方の座標を使用してフィールドにアクセスする必要があり、次のいずれか

String knightAtI = Arrays.toString(knight[i]) 
1

あなたは2次元配列を持っている上で実行得るために

+0

良い答えです。 '[私@ 6ac1abcf'は何ですか? – Gray

+0

これは 'java.lang.Object'で定義された' toString() 'のデフォルト実装の出力です。これは_objectsClassName_ + @ + _objectsHashCodeAsHexString_です。 ''私はプリミティブなint配列のクラス名です( '' int []。class.toString() ') –

1

knight[i]またはknight[j]メモリ位置を指します。

int knightAtIandJ = knight[i][j] 

それとも、Stringに私の配列を変換しますknightは2D配列なので、配列の knight[i][j]を使用して配列の値を出力する必要があります。

0

配列のインデックスではなく、配列を指しています....実際に値の代わりに配列のハッシュコードが印刷されるため、knight [i] [j]を使用してください。

knight[i]  <-- it is an array 
knight[i][j] <-- it is j element in knight[i] array. 
1

あなたの配列は無意味です。何をしたいのですか? 使用し、あなたが望む位置を印刷するには:

System.out.println("(" + i + ";" + j + ")"); 
0

ので、次のコード行は、if文の外にある、閉じ括弧の直後にセミコロンを持っているあなたのif文のほとんどを。 @Amer Qarabsaは言ったように、常にif文の本文を中括弧の中に入れて、末尾括弧と開始中括弧の間にセミコロンを入れないように注意してください。

関連する問題