Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 爪哇棋盘边界?_Java_Loops_Chess - Fatal编程技术网

Java 爪哇棋盘边界?

Java 爪哇棋盘边界?,java,loops,chess,Java,Loops,Chess,我一直在努力为我的棋盘画一个边界,从上到下8-1,从左到右a-h。我不太清楚怎么做。非常感谢您的建议和帮助!干杯:) 当前输出为: public class ex5 { public enum Chessmen { WHITE_KING, WHITE_QUEEN, WHITE_ROOK, WHITE_BISHOP, WHITE_KNIGHT, WHITE_PAWN, BLACK_KING, BLACK_QUEEN, BLAC

我一直在努力为我的棋盘画一个边界,从上到下8-1,从左到右a-h。我不太清楚怎么做。非常感谢您的建议和帮助!干杯:)

当前输出为:

public class ex5 {
public enum Chessmen {
    WHITE_KING,
    WHITE_QUEEN,
    WHITE_ROOK,
    WHITE_BISHOP,
    WHITE_KNIGHT,
    WHITE_PAWN,
    BLACK_KING,
    BLACK_QUEEN,
    BLACK_ROOK,
    BLACK_BISHOP,
    BLACK_KNIGHT,
    BLACK_PAWN,
    EMPTY
}
public static void printBoard (Chessmen [][] chessboard){
    for (int i=0; i<chessboard.length;i++){
        for (int j = 0; j<chessboard.length;j++){
            switch (chessboard [i][j]){
            case WHITE_KING:
                System.out.print("WK\t");
                break;
            case WHITE_QUEEN:
                System.out.print("WQ\t");
                break;
            case WHITE_ROOK:
                System.out.print("WR\t");
                break;
            case WHITE_BISHOP:
                System.out.print("WB\t");
                break;
            case WHITE_KNIGHT:
                System.out.print("WKn\t");
                break;
            case WHITE_PAWN:
                System.out.print("WP\t");
                break;
            case BLACK_KING:
                System.out.print("BK\t");
                break;
            case BLACK_QUEEN:
                System.out.print("BQ\t");
                break;
            case BLACK_ROOK:
                System.out.print("BR\t");
                break;
            case BLACK_BISHOP:
                System.out.print("BB\t");
                break;
            case BLACK_KNIGHT:
                System.out.print("BKn\t");
                break;
            case BLACK_PAWN:
                System.out.print("BP\t");
                break;
            default:
                System.out.print(" " + "\t");
                break;
            }
        }
        System.out.println("");
    }
}



public static void main(String[] args) {
    int Rows = 8;
    int Columns = 8;
    Chessmen [][] chessboard = new Chessmen [Rows][Columns];
    for (int i=0;i<chessboard.length; i++){
        for (int j=0;j<chessboard[0].length;j++){
            if (i==1){
                chessboard [i][j]= Chessmen.BLACK_PAWN;
            }else if (i==6){
                chessboard [i][j]= Chessmen.WHITE_PAWN;
            }else if ((i==0&&j==7)||(i==0&&j==0)){
                chessboard [i][j]= Chessmen.BLACK_ROOK;
            }else if ((i==0&&j==1)||(i==0&&j==6)){
                chessboard [i][j] = Chessmen.BLACK_KNIGHT;
            }else if ((i==0&&j==2)||(i==0&&j==5)){
                chessboard [i][j] = Chessmen.BLACK_BISHOP;
            }else if (i==0&&j==3){
                chessboard [i][j] = Chessmen.BLACK_KING;
            }else if (i==0&&j==4){
                chessboard [i][j] = Chessmen.BLACK_QUEEN;
            }else if ((i==7&&j==0)||(i==7&&j==7)){
                chessboard [i][j]= Chessmen.WHITE_ROOK;
            }else if ((i==7&&j==1)||(i==7&&j==6)){
                chessboard [i][j] = Chessmen.WHITE_KNIGHT;
            }else if ((i==7&&j==2)||(i==7&&j==5)){
                chessboard [i][j] = Chessmen.WHITE_BISHOP;
            }else if (i==7&&j==3){
                chessboard [i][j] = Chessmen.WHITE_KING;
            }else if (i==7&&j==4){
                chessboard [i][j] = Chessmen.WHITE_QUEEN;
        }else {
                chessboard [i][j]= Chessmen.EMPTY;
            }

        }   

    }
        printBoard (chessboard);

}
}
BR BKn BB BK BQ BB BKn BR
英国石油公司英国石油公司

可湿性粉剂
西九龙西九龙西九龙西九龙西九龙西九龙西九龙西九龙西九龙

下面是Java代码:

public class ex5 {
public enum Chessmen {
    WHITE_KING,
    WHITE_QUEEN,
    WHITE_ROOK,
    WHITE_BISHOP,
    WHITE_KNIGHT,
    WHITE_PAWN,
    BLACK_KING,
    BLACK_QUEEN,
    BLACK_ROOK,
    BLACK_BISHOP,
    BLACK_KNIGHT,
    BLACK_PAWN,
    EMPTY
}
public static void printBoard (Chessmen [][] chessboard){
    for (int i=0; i<chessboard.length;i++){
        for (int j = 0; j<chessboard.length;j++){
            switch (chessboard [i][j]){
            case WHITE_KING:
                System.out.print("WK\t");
                break;
            case WHITE_QUEEN:
                System.out.print("WQ\t");
                break;
            case WHITE_ROOK:
                System.out.print("WR\t");
                break;
            case WHITE_BISHOP:
                System.out.print("WB\t");
                break;
            case WHITE_KNIGHT:
                System.out.print("WKn\t");
                break;
            case WHITE_PAWN:
                System.out.print("WP\t");
                break;
            case BLACK_KING:
                System.out.print("BK\t");
                break;
            case BLACK_QUEEN:
                System.out.print("BQ\t");
                break;
            case BLACK_ROOK:
                System.out.print("BR\t");
                break;
            case BLACK_BISHOP:
                System.out.print("BB\t");
                break;
            case BLACK_KNIGHT:
                System.out.print("BKn\t");
                break;
            case BLACK_PAWN:
                System.out.print("BP\t");
                break;
            default:
                System.out.print(" " + "\t");
                break;
            }
        }
        System.out.println("");
    }
}



public static void main(String[] args) {
    int Rows = 8;
    int Columns = 8;
    Chessmen [][] chessboard = new Chessmen [Rows][Columns];
    for (int i=0;i<chessboard.length; i++){
        for (int j=0;j<chessboard[0].length;j++){
            if (i==1){
                chessboard [i][j]= Chessmen.BLACK_PAWN;
            }else if (i==6){
                chessboard [i][j]= Chessmen.WHITE_PAWN;
            }else if ((i==0&&j==7)||(i==0&&j==0)){
                chessboard [i][j]= Chessmen.BLACK_ROOK;
            }else if ((i==0&&j==1)||(i==0&&j==6)){
                chessboard [i][j] = Chessmen.BLACK_KNIGHT;
            }else if ((i==0&&j==2)||(i==0&&j==5)){
                chessboard [i][j] = Chessmen.BLACK_BISHOP;
            }else if (i==0&&j==3){
                chessboard [i][j] = Chessmen.BLACK_KING;
            }else if (i==0&&j==4){
                chessboard [i][j] = Chessmen.BLACK_QUEEN;
            }else if ((i==7&&j==0)||(i==7&&j==7)){
                chessboard [i][j]= Chessmen.WHITE_ROOK;
            }else if ((i==7&&j==1)||(i==7&&j==6)){
                chessboard [i][j] = Chessmen.WHITE_KNIGHT;
            }else if ((i==7&&j==2)||(i==7&&j==5)){
                chessboard [i][j] = Chessmen.WHITE_BISHOP;
            }else if (i==7&&j==3){
                chessboard [i][j] = Chessmen.WHITE_KING;
            }else if (i==7&&j==4){
                chessboard [i][j] = Chessmen.WHITE_QUEEN;
        }else {
                chessboard [i][j]= Chessmen.EMPTY;
            }

        }   

    }
        printBoard (chessboard);

}
}
公共类ex5{
公共枚举棋子{
白王,
白皇后,
白车,
白主教,
白衣骑士,
白当铺,
黑人国王,
黑皇后,
黑车,
黑人主教,
黑骑士,
黑奴,
空的
}
公共静态空白打印板(棋子[][]棋盘){

对于(int i=0;i在外部渲染循环之前和之后调用
System.out.println(“+------------------------------------------------+”)


在内部渲染循环之前和之后调用
System.out.print(“|”)


您需要对其进行一些调整。

在外部渲染循环之前和之后调用
System.out.println(“+------------------------------------------------+”)


在内部渲染循环之前和之后调用
System.out.print(“|”)

你需要稍微调整一下。

[编辑] 回应你的评论

我认为您需要的实际上是一个10x10网格,您需要调整您的逻辑,只将游戏区域打印为10x10内的8x8,并使用外部正方形(不包括角)打印字母和数字。 [结束编辑]

你的默认值不是空的,它只是一无所有。在你的交换机中捕获空的大小写并打印你的标签,你将看到所有的空白

换句话说,不是

case BLACK_PAWN:
            System.out.print("BP\t");
            break;
        default:
            System.out.print(" " + "\t");
            break;
        }
您要执行以下操作:

case BLACK_PAWN:
            System.out.print("BP\t");
            break;
        case EMPTY:
            System.out.print(" " + "\t");
            break;
        }
[编辑] 回应你的评论

我认为您需要的实际上是一个10x10网格,您需要调整您的逻辑,只将游戏区域打印为10x10内的8x8,并使用外部正方形(不包括角)打印字母和数字。 [结束编辑]

你的默认值不是空的,它只是一无所有。在你的交换机中捕获空的大小写并打印你的标签,你将看到所有的空白

换句话说,不是

case BLACK_PAWN:
            System.out.print("BP\t");
            break;
        default:
            System.out.print(" " + "\t");
            break;
        }
您要执行以下操作:

case BLACK_PAWN:
            System.out.print("BP\t");
            break;
        case EMPTY:
            System.out.print(" " + "\t");
            break;
        }

正如其他人所说,你需要在一行上显示空行和空方。此外,你需要为每个方格打印相同数量的字符,因此我建议你使用BN表示黑夜,BK表示黑王。N用代数国际象棋符号表示骑士,以区别于国王

<>因为我已经在C++中解决了这个问题,我会把我的代码放在下面。你可以用它作为一个算法来在java中翻译它。它会显示这样的一个板:

  (Coups reversibles : 0)
  +-X-+---+---+---+---+---+---+-X-+
8 |=R=|=N=|=B=|=Q=|=K=|=B=|=N=|=R=|
  +---+---+---+---+---+---+---+---+
7 |=P=|=P=|=P=|=P=|=P=|=P=|=P=|=P=|
  +---+---+---+---+---+---+---+---+
6 |   | . |   | . |   | . |   | . |
  +---+---+---+---+---+---+---+---+
5 | . |   | . |   | . |   | . |   |
  +---+---+---+---+---+---+---+---+
4 |   | . |   | . |   | . |   | . |
  +---+---+---+---+---+---+---+---+
3 | . |   | . |   | . |   | . |   |
  +---+---+---+---+---+---+---+---+
2 | P | P | P | P | P | P | P | P |
  +---+---+---+---+---+---+---+---+
1 | R | N | B | Q | K | B | N | R |
=>+-X-+---+---+---+---+---+---+-X-+
    a   b   c   d   e   f   g   h
我认为它有一些有趣的特点。没有棋子的黑色正方形中间有一个点。棋盘底部或顶部的箭头告诉用户下一步要移动哪一边。如果没有“X”,则告诉您一辆车是否可以进城。一列下面的箭头“^”表示可以“顺道”拿走该列中的棋子

下面是代码(可能有错误,我只是翻译了法语中的标识符和注释,然后再次编译):

///////////////////////////////////////////////////////////////////////////

std::ostream&operator正如其他人所说,你需要在一行上显示空行和空方块。此外,你需要为每个方块打印相同数量的字符,因此我建议你使用BN表示黑夜,BK表示黑国王。N用代数象棋符号表示骑士,以区别于king

<>因为我已经在C++中解决了这个问题,我会把我的代码放在下面。你可以用它作为一个算法来在java中翻译它。它会显示这样的一个板:

  (Coups reversibles : 0)
  +-X-+---+---+---+---+---+---+-X-+
8 |=R=|=N=|=B=|=Q=|=K=|=B=|=N=|=R=|
  +---+---+---+---+---+---+---+---+
7 |=P=|=P=|=P=|=P=|=P=|=P=|=P=|=P=|
  +---+---+---+---+---+---+---+---+
6 |   | . |   | . |   | . |   | . |
  +---+---+---+---+---+---+---+---+
5 | . |   | . |   | . |   | . |   |
  +---+---+---+---+---+---+---+---+
4 |   | . |   | . |   | . |   | . |
  +---+---+---+---+---+---+---+---+
3 | . |   | . |   | . |   | . |   |
  +---+---+---+---+---+---+---+---+
2 | P | P | P | P | P | P | P | P |
  +---+---+---+---+---+---+---+---+
1 | R | N | B | Q | K | B | N | R |
=>+-X-+---+---+---+---+---+---+-X-+
    a   b   c   d   e   f   g   h
我认为它有一些有趣的特点。没有棋子的黑色正方形中间有一个点。棋盘底部或顶部的箭头告诉用户下一步要移动哪一边。如果没有“X”,则告诉您一辆车是否可以进城。一列下面的箭头“^”表示可以“顺道”拿走该列中的棋子

下面是代码(可能有错误,我只是翻译了法语中的标识符和注释,然后再次编译):

///////////////////////////////////////////////////////////////////////////

std::ostream&operator我这样做是为了解决Java中的一个N皇后问题。因此,如果您试图打印皇后之外的其他部分,那么相应地调整代码。如果您不熟悉这个问题,那么将N皇后放置在N x N棋盘上是一个挑战,这样就不会有两个皇后相互检查。我知道这是在您完成p之后的几年我回答了这个问题,但我想我应该把代码片段放在这里,以便将来有人使用

无论如何,第一步是创建表示棋盘上的空格和棋盘上当前棋子的值的nxn数组。值得注意的是,由于这是Java,我们的棋盘是基于0的(因为每行中的空格编号为0到7,而不是1到8):

如果您的问题涉及实际的国际象棋游戏,您需要迭代每一个棋子,并以类似的方式更新其棋盘位置

在我解释如何制作这个电路板之前,让我向你展示与前面提到的向量相对应的电路板。顺便说一句,注意没有皇后在检查!我用遗传算法解决了这个问题

+---+---+---+---+---+---+---+---+
|   | Q |   |   |   |   |   |   | 
+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   | Q |   | 
+---+---+---+---+---+---+---+---+
|   |   | Q |   |   |   |   |   | 
+---+---+---+---+---+---+---+---+
|   |   |   |   |   | Q |   |   | 
+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   | Q | 
+---+---+---+---+---+---+---+---+
|   |   |   |   | Q |   |   |   | 
+---+---+---+---+---+---+---+---+
| Q |   |   |   |   |   |   |   | 
+---+---+---+---+---+---+---+---+
|   |   |   | Q |   |   |   |   | 
+---+---+---+---+---+---+---+---+
我们的下一步是在行之间(以及在顶部和底部)创建边框。我将每一行视为一个格式化字符串。因为我们有空格行和边框行,所以我们的行数组大小为2*N+1

String[] row = new String[2*N + 1];
String border = "";
//must be the length of board
for(int i = 0; i < N; i++){
    border += "+---";
}
border += "+";
//every other row is a border row
for(int i = 0; i < 2*N +1; i+=2){
    row[i] = border;
}
//must include the bottom
row[2*N] = border;
String[]行=新字符串[2*N+1];
字符串边框=”;
//必须是木板的长度
对于(int i=0;ifor(int i = 0; i < 2*N +1; i++){
    System.out.println(row[i]);
}