2016-09-28 51 views
1

我有一個java的任務是要求一個代碼,告訴用戶輸入一個點(行和列或x和y)和程序輸出所有可能的移動棋的騎士。如果語句產生亂碼輸出

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]+"}"); 

    } 

       } 

當我在NetBeans中運行這個它給了我這樣的輸出:

{[[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]} 

它沒有任何意義,我不知道我做錯了什麼在我的代碼!

+2

你指向一個數組而不是數組索引....使用騎士[i] [j] – Rishi

+0

這是怎麼得到upvote? – shmosel

回答

0

您需要封閉加法和減法運算爲i和j括號內爲if語句只獲取的條件

1

你有一個二維數組執行,這是一個數組的數組:

[ 
    [ 0,1,2,3 ...], 
    [...], 
    [...] 
] 

當尋址數組中的位置,你會得到陣列在該位置,即

int[] knightAtI = knight[i]; 

由於int[]數組是一個對象,toString()方法將返回一個引用字符串。

所以,你要麼必須使用兩個座標來訪問現場:

int knightAtIandJ = knight[i][j] 

或者你轉換陣列在我的字符串:

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

很好的答案。你能否解釋一下'[I @ 6ac1abcf'是什麼? – Gray

+0

這是'java.lang.Object'中定義的'toString()'的默認實現的輸出,它是_objectsClassName_ + @ + _objectsHashCodeAsHexString_。 ''我是一個基本的int數組的類名(嘗試'int []。class.toString()'), –

1

knight[i]knight[j]將指向一個內存位置因爲knight是一個二維數組。 所以你必須使用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語句的主體放在花括號內,並且非常小心,不要在末尾括號和左括號之間放置分號。