如果声明产生乱码输出

时间:2016-09-28 18:34:05

标签: java arrays if-statement multidimensional-array boolean

我有一个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中运行它时,它给了我这种输出:

{[I@6ac1abcf,[I@6ac1abcf}

{[I@50f6d9ca,[I@7e54864c}

{[I@6ac1abcf,[I@6ac1abcf}

{[I@5f3d285f,[I@7e54864c}

{[I@7e54864c,[I@2825a5d2}

{[I@6ac1abcf,[I@7e54864c}

{[I@7e54864c,[I@2825a5d2}

它没有意义,我不知道我在代码中做错了什么!

6 个答案:

答案 0 :(得分:1)

你有一个二维数组,即一个数组数组:

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

在寻址该数组中的某个位置时,您将获得该位置的数组,即

int[] knightAtI = knight[i];

由于int[]数组是一个对象,toString()方法将返回一个引用字符串。

所以你要么必须使用两个坐标访问该字段:

int knightAtIandJ = knight[i][j]

或者将I处的数组转换为String:

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

答案 1 :(得分:1)

knight[i]knight[j]将指向数组的内存位置,因为knight是一个2D数组。 因此,您必须使用knight[i][j]来打印数组的值。

答案 2 :(得分:1)

你的阵列毫无意义。你想用它做什么? 要打印所需的位置,请使用:

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

答案 3 :(得分:0)

你需要将i和j的加法和减法运算括在括号中,使if语句只能在条件下执行

答案 4 :(得分:0)

代码指向数组而不是数组索引....使用knight [i] [j],因为数组的哈希码被打印而不是实际值。

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

答案 5 :(得分:0)

大多数if语句在结束括号后立即有分号,因此下一行代码在if语句之外。像@Amer Qarabsa那样说并且总是将if语句的主体放在花括号中,并且要小心不要在末括号和左括号之间放一个分号。