【问题标题】:How can I swap places of strings in a 2d string array如何交换二维字符串数组中的字符串位置
【发布时间】:2020-05-02 13:52:26
【问题描述】:

我有作业要做一个自定义版本的国际象棋,它是 6x6 并且棋子以特定的方式移动。但是现在我试图弄清楚如何选择一块,然后将它放在我设置的二维数组中的另一个位置并交换字符的位置。现在我有:

public class Chess {

    static final int rows = 7;
    static final int columns = 7;

    public static void main(String[] args) {
        String[][] board = new String[rows][columns];
        fillBoard(board);
        enterMove();
    }
    public static void fillBoard(String[][] board){
        for (int row = 0; row < 7; row++) {
            for (int col = 0; col < 7; col++) {
                board[row][col] = " X ";
                outerShell(board);
                pawns(board);
                System.out.print(board[row][col]);
            }
            System.out.println();
        }
    }
    public static void outerShell(String[][] board){
        board[0][0] = "   ";
        board[0][1] = " A ";
        board[0][2] = " B ";
        board[0][3] = " C ";
        board[0][4] = " D ";
        board[0][5] = " E ";
        board[0][6] = " F ";
        board[1][0] = " 6 ";
        board[2][0] = " 5 ";
        board[3][0] = " 4 ";
        board[4][0] = " 3 ";
        board[5][0] = " 2 ";
        board[6][0] = " 1 ";
    }
    public static void pawns(String[][] board){
        //whitePawns
        board[1][1] = "wDw";
        board[1][2] = " wD";
        board[1][3] = " wQ";
        board[1][4] = " wK";
        board[1][5] = " wM";
        board[1][6] = " wDw ";
        //blackPawns
        board[6][1] = "bDw";
        board[6][2] = " bM";
        board[6][3] = " bK";
        board[6][4] = " bQ";
        board[6][5] = " bD";
        board[6][6] = " bDw";
    }
    public static void enterMove(){
        System.out.println("");
        System.out.println("Select the piece you want to move(Example a1) if you want to quit enter: q");
        Scanner gameInput  = new Scanner(System.in);
        String pieceSelect = gameInput.nextLine();
        if(pieceSelect.equals("q")){
            System.exit(0);
        }
        switch (pieceSelect){
            case "a1": 

        }
        System.out.println(" ");
        System.out.println("Now select a finishing position for the piece to move to");
        String piecePlace = gameInput.nextLine();
        switch (piecePlace){
            case "a2": 
        }
    }
}

enterMove() 部分,我试图用switch 来做,但不知道如何交换数组中的两个位置。我并没有死心塌地使用switch,因为我不确定这是否可能。如果有人可以制作此代码的版本,其中通过输入特定坐标(如 a1)选择 bDw 然后输入另一个坐标并将 bDwX 交换,我将其用作空白空间的指示符,如果可能的话解释一下,我将不胜感激。

【问题讨论】:

  • 问题是你需要跟踪棋子的当前位置。为此,您可能需要在 Java 中使用像 Map 这样的键值数据结构。
  • 或者,您可以将初始位置 (x, y) 和最终位置 (x,y) 作为输入。当你完成后,你可以说:“Moved xx from aa to bb”。
  • 是的,我正在尝试做建议的第二件事,但不知道如何在代码中实现它。现在我想用输入将输入的片段与输入的 X 的位置交换,这在我的程序中表示空白。稍后我可能需要更改一些内容,例如当一个棋子被选择而不是敌人棋子时将其删除,就像拿走它一样,如果输入棋子以继续友军棋子而不是有效的移动。
  • 您可以从用户那里获取两次整数输入作为初始位置。即一个用于 x 坐标,一个用于 y 坐标。稍后您可以将此值用作 board[x][y] 来访问或更改板的值。您可以将 pawn 的值复制到另一个变量中并将 board[x][y] 设置为空字符串。并用这个 var 设置 board[a][b] 的值。其中 a,b 是最终坐标。
  • 我不确定我是否真的在关注你。我忘了提到我在编程方面不是很有经验,所以如果你这么好心,把它简化一下,并详细解释一下,谢谢......对不起。

标签: java arrays switch-statement


【解决方案1】:

我之前做过一个国际象棋程序,我曾经将所有棋子存储在一个数组中(这里是 6x6 数组),我使用索引值作为棋盘坐标。 所以当一个棋子被选中时,会调用一个函数来显示所选棋子的有效动作。

有效的移动可以存储在某个数组中并且可以检查。然后只需交换数组本身内的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 2016-02-22
    • 2021-01-28
    • 1970-01-01
    相关资源
    最近更新 更多