Хранение статической переменной во временной переменной - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь создать шахматный движок как проект с долгим временем.В настоящее время я работаю над методом переворачивания доски (например, переворачивая ее, но меняя цвета).Прописные буквы обозначают белые фигуры, строчные буквы - черные.Но похоже, что java перезаписывает мою переменную temp , хотя я не присваиваю ей значения после начальной инициализации.Как видно из System.out.println : "r" <- первый вывод;«R» <- второй вывод </p>

Я новичок в JAVA и думаю, что проблема возникает при назначении значения статической переменной временной переменной.На мой взгляд, остальная часть кода должна работать нормально.

public class chess{
    static String chessBoard[][]={
        {"r","k","b","q","a","b","k","r"},
        {"p","p","p","p","p","p","p","p"},
        {" "," "," "," "," "," "," "," "},
        {" "," "," "," "," "," "," "," "},
        {" "," "," "," "," "," "," "," "},
        {" "," "," "," "," "," ","P"," "},
        {"P","P","P","P","P","P"," ","P"},
        {"R","K","B","Q","A","B","K","R"}};
}

public static void flipBoard() {
        String temp[][]=chessBoard;
        System.out.println(temp[0][0]);
        for(int i=0;i<64;i++){
            int r=i/8, c=i%8;
                chessBoard[r][c]=temp[7-r][7-c];
            }

        System.out.println(temp[0][0]);
    }

Я ожидаю:

chessBoard[][]={
        {"R","K","B","A","Q","B","K","R"},
        {"P"," ","P","P","P","P","P","P"},
        {" ","P"," "," "," "," "," "," "},
        {" "," "," "," "," "," "," "," "},
        {" "," "," "," "," "," "," "," "},
        {" "," "," "," "," "," "," "," "},
        {"p","p","p","p","p","p","p","p"},
        {"r","k","b","a","q","b","k","r"}};

Но я получаю:

chessBoard[][]={
        {"R","K","B","A","Q","B","K","R"},
        {"P"," ","P","P","P","P","P","P"},
        {" ","P"," "," "," "," "," "," "},
        {" "," "," "," "," "," "," "," "},
        {" "," "," "," "," "," "," "," "},
        {" "," "," "," "," "," ","P"," "},
        {"P","P","P","P","P","P"," ","P"},
        {"R","K","B","Q","A","B","K","R"}};

Как вывидно, все фигуры теперь белые.Я действительно схожу с ума по этому поводу, и любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Почему бы и нет:

public static void flipBoard() {
    for(int r=0;r<4;r++){
       String[] temp = chessBoard[r];          
       chessBoard[r] = chessBoard[7-r];
       chessBoard[7-r] = temp;
    }
}

Или, возможно, вы захотите повернуть вспять по диагонали:

public static void flipBoard() {
    for(int r=0;r<4;r++){
       for(int c=0;c<8;c++){
          String temp= chessBoard[r][c];        
          chessBoard[r][c] = chessBoard[7-r][7-c];
          chessBoard[7-r][7-c] = temp;
       }
    }
}
0 голосов
/ 04 февраля 2019

String temp[][]=chessBoard; // присваивает ссылку на переменную chessBoard температуре.

Чтобы сделать глубокую копию массива, попробуйте это

String[][] temp = new String[chessBoard.length][chessBoard[0].length];
...