我有一个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语句的主体放在花括号里,并且非常小心,不要在圆括号末和左括号之间放一个分号。