If语句产生乱码输出



我有一个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}

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

您有一个二维数组,即数组的数组:

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

当寻址数组中的位置时,您将获得该位置上的数组,即

int[] knightAtI = knight[i];

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

所以你必须使用两个坐标来访问这个字段:

int knightAtIandJ = knight[i][j]

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

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

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

你的数组没有意义。你想用它做什么?要打印所需的位置,请使用:

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

您需要将i和j的加减操作括在括号中,以便if语句仅在

条件下执行

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

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

大多数if语句在右括号之后都有一个分号,因此下一行代码在if语句之外。就像@Amer Qarabsa说的那样,总是把if语句的主体放在花括号里,并且非常小心,不要在圆括号末和左括号之间放一个分号。

相关内容

  • 没有找到相关文章

最新更新