Java 有没有办法将国际象棋棋子的输入设置为网格索引(2D数组)?

Java 有没有办法将国际象棋棋子的输入设置为网格索引(2D数组)?,java,arrays,input,Java,Arrays,Input,因此,在我继续调整我为国际象棋所做的程序之前,我不认为使用字符串并将其放入网格是一个好主意,因此,如果以后我想比较当前棋子的位置与另一棋子的位置等等,那么很难做到这一点,那么有没有办法代替我这样做,Rook=sc.nextLine();或者任何一块,或者像这样的东西 edit1:如果我尝试比较或使用网格的字符串输入,因为它的网格是一个2D数组字符串,所以我想将所有输入作为2D数组,我该怎么做?清楚了吗?对不起,我的英语-那是我的问题 // private String[][] Rook; //

因此,在我继续调整我为国际象棋所做的程序之前,我不认为使用字符串并将其放入网格是一个好主意,因此,如果以后我想比较当前棋子的位置与另一棋子的位置等等,那么很难做到这一点,那么有没有办法代替我这样做,Rook=sc.nextLine();或者任何一块,或者像这样的东西


edit1:如果我尝试比较或使用网格的字符串输入,因为它的网格是一个2D数组字符串,所以我想将所有输入作为2D数组,我该怎么做?清楚了吗?对不起,我的英语-那是我的问题

// private String[][] Rook;
// something here i don't know how to do and set it to the grid index 
// Rook[grid] = sc.nextline(), this wont work I know because im using a int into a Rook String[][] . so is there a way to do Rook 2D array and set it to the array grid?

import java.util.Scanner;
类棋子
{
//主代码位于类的最底层
扫描仪sc=新的扫描仪(System.in);
私有字符串[][]网格=新字符串[8][8];
//目标是x,因此如果x位于网格中的某个位置,则程序应确定
//任何一块都可以移动到那个位置。
私人弦王,皇后,车,主教,骑士,目标;
公共无效棋子(){
//请记住,您仅在扫描程序中对字符串使用peices进行测试
//将它们切换到2D阵列,以便我可以轻松访问它
System.out.println(“您好Guest00129,欢迎来到Chess”);
System.out.println(“为了玩这个游戏,输入下面的片段(cap;atilaized)”;
System.out.println(“c列和第5行的Rook:Rc5”);
System.out.println(“请输入Rook的位置”);
rook=sc.nextLine();
System.out.println(“请输入国王的职位”);
king=sc.nextLine();
System.out.println(“请输入女王职位”);
queen=sc.nextLine();
System.out.println(“请为Bishop输入一个位置”);
bishop=sc.nextLine();
System.out.println(“请输入骑士的职位”);
knight=sc.nextLine();
System.out.println(“请为目标(X)输入一个位置,以便将PEICE移动到该位置”);
target=sc.nextLine();
}
公共void printGrid(){

对于(int row=0;row,按字面意思回答问题:

代替Rook=sc.nextLine();我可以像Rook[some Value=grid][samething]=sc.nextLine()这样做吗

不能,因为Rook不是已定义的类型,也不是二维数组,也不能定义为字符串

我相信你想问的是,如何在“字符串和网格”方法之外表示国际象棋的位置,这在更面向对象的方法中是完全可能的,我很快给出了一个不使用任何2D数组的粗略示例:

考虑以下抽象类:

public abstract class ChessPiece {
    private Point position;
    private String myteam;  // Black or White.

    public Point getPosition() {
        return position;
    }

    //...presumably a setPosition method exists, 
    //as well as an abstract move validator. 
}
然后,您可以为每个棋子类扩展此类:
Pawn
Rook
Bishop
Knight
Queen
King
,根据需要添加棋子特定的逻辑。因为我们知道棋子是在8x8网格上进行的,所以我们必须始终验证点.x和点.y是hin的范围为0-7(含0-7),并且不会与其他工件发生碰撞。比较工件位置只是比较其点成员的问题

整个游戏状态可能只是包含所有棋子对象的集合,给出一个功能性(内存中)的棋盘表示,而看不到网格


当然,还有很多其他选项可以用来表示你的国际象棋游戏,而且它们可能比我刚刚拼凑的更好。谷歌会话表明这是一种流行且可靠的国际象棋表示方法。

实际的问题/问题是什么?如果我尝试比较或使用网格中的字符串输入,我会nt工作,因为它的网格是一个2D数组字符串,所以我想把所有的输入都作为2D数组,我该怎么做?清楚了吗?对不起,我用英语代替了Rook=sc.nextLine();我能做点像Rook[some Value=Grid][samething]=sc.nextLine()这样的事情吗谢谢,但你是说不需要2D数组?因为我的任务需要一个8乘8的网格和输出对于空空间,其余部分从用户输入输出片段。因此我只是想知道用户输入的片段是否可以使用2D完成。因为您存储的只是片段所在的位置,所以您真正需要做的就是在每个可能的位置检查片段是否存在,然后绘制片段。默认情况下,您可以绘制空空间,而无需使用需要存储整个网格。我不知道你所说的“输入可以使用2D完成”是什么意思;你是指点击输入吗?K我想说的是,如果我在位置Qb2选择皇后,换句话说,在第2列第2行选择皇后,我如何从网格中获取其索引?就像我做网格一样[Queen.charAt(“Q”)]为了得到那个位置的坐标?嗯…你是在输入皇后在第2行第2列吗?因为你已经有了坐标,因为刚刚输入了它们。否则,
Queen.getPosition()
在我提出的模型中,方法将返回存储在皇后点对象中的坐标。
字符(…)
永远不适用,因为它意味着在给定位置显示字符,而不是搜索字符的位置。
public abstract class ChessPiece {
    private Point position;
    private String myteam;  // Black or White.

    public Point getPosition() {
        return position;
    }

    //...presumably a setPosition method exists, 
    //as well as an abstract move validator. 
}