2014-09-30 57 views
0

我已經被賦予打印我已經構建到控制檯的棋盤的任務。電路板的頂部必須有'a'到'h',而左邊的是1到8。每個首字母應該與一個字母和一個數字對齊,例如,一個黑車(「bR」)應該放置在8處(並且應該在數組中初始化爲[0] [0])。當我在我的printBoard方法中內嵌的for循環僅限於j < 1時,第一行的部分打印在正確的位置,但是當擴大極限時打印整個紙板時,會在不正確的位置打印部件,我不知道爲什麼。 (我承認存在代碼可讀性和代碼效率不高的問題,例如,不是簡單地初始化電路板,省去冗長的if/else塊,並給予enums一個toString方法來縮短開關語句)。爲什麼我的打印方法在嵌套for循環時無法正確顯示超出j <1?

public class Virtual_Chessboard { 

    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 Chessmen[][] chessboard = new Chessmen[8][8]; 

    public static void createBoard(){ 


     int rows = 8; 
     int columns = 8; 

     for(int y=0;y<rows;y++){ 
      for(int x=0;x<columns;x++){ 
       if((y==0 && x==0) || (x==7 && y==0)){ 
        chessboard[x][y] = Chessmen.BLACK_ROOK; 
       } 
       else if((x==1 && y==0)||(x==6 && y==0)){ 
        chessboard[x][y] = Chessmen.BLACK_KNIGHT; 
       } 
       else if((x==2 && y==0)||(x==5 && y==0)){ 
        chessboard[x][y] = Chessmen.BLACK_BISHOP; 
       } 
       else if(x==3 && y==0){ 
        chessboard[x][y] = Chessmen.BLACK_KING; 
       } 
       else if(x==4 && y==0){ 
        chessboard[x][y] = Chessmen.BLACK_QUEEN; 
       } 
       else if((x==0 && y==7)||(x==7 && y==7)){ 
        chessboard[x][y]= Chessmen.WHITE_ROOK; 
       } 
       else if((x==1 && y==7)||(x==6 && y==7)){ 
        chessboard[x][y] = Chessmen.WHITE_KNIGHT; 
       } 
       else if((x==2 && y==7)||(x==5 && y==7)){ 
        chessboard[x][y] = Chessmen.WHITE_BISHOP; 
       } 
       else if(x==3 && y==7){ 
        chessboard[x][y] = Chessmen.WHITE_KING; 
       } 
       else if(x==4 && y==7){ 
        chessboard[x][y] = Chessmen.WHITE_QUEEN; 
       } 
       else if(y==1){ 
        chessboard[x][y] = Chessmen.BLACK_PAWN; 
       } 
       else if(y==6){ 
        chessboard[x][y] = Chessmen.WHITE_PAWN; 
        } 
       else{ 
        chessboard[x][y] = Chessmen.EMPTY; 
       } 
      } 
     } 
    } 

    public static void printBoard(Chessmen[][] chessboard){ 
     int k = 8; 
     System.out.print("\t"+"a" + "\t" + "b" + "\t" + "c" + "\t" + "d" + "\t" + "e"+ "\t" + "f" + "\t" + "g" + "\t" + "h" + "\n" + k); 
     for(int i = 0; i<8;i++){ 
      for(int j = 0;j<8;j++){ 
       System.out.print("\t"); 
       switch(chessboard[i][j]){ 
       case WHITE_KING : System.out.print("WK"); 
       break; 
       case WHITE_QUEEN : System.out.print("wQ"); 
       break; 
       case WHITE_ROOK : System.out.print("wR"); 
       break; 
       case WHITE_BISHOP : System.out.print("wB"); 
       break; 
       case WHITE_KNIGHT : System.out.print("wK"); 
       break; 
       case WHITE_PAWN : System.out.print("wP"); 
       break; 
       case BLACK_KING : System.out.print("BK"); 
       break; 
       case BLACK_QUEEN : System.out.print("bQ"); 
       break; 
       case BLACK_ROOK : System.out.print("bR"); 
       break; 
       case BLACK_BISHOP : System.out.print("bB"); 
       break; 
       case BLACK_KNIGHT : System.out.print("bK"); 
       break; 
       case BLACK_PAWN : System.out.print("bP"); 
       break; 

       } //switch 

      } /// j for 


     } //i for 
     k--; 
     System.out.println("\n" + "\n"+k); 
    } 

    public static void main(String[] args) { 


     createBoard(); 
     printBoard(chessboard); 

    } 

} 
+0

請輸入正確和錯誤的輸出示例。 – chrylis 2014-09-30 09:54:27

+0

看看這個http://stackoverflow.com/questions/6667243/using-enum-values-as-string-literals – 2014-09-30 10:27:28

回答

0

您沒有EMPTY的情況,也沒有在switch語句中的缺省值;當j < 1這種情況下不會發生。否則你的輸出將會出現亂碼。

0
  1. 現在你遍歷一列的行,但你想遍歷一行的列。在數組中交換i和j。

  2. 你想後斷行內的循環,移動

    K--;

    System.out.print(「\ n」+「\ n」+ k);

    成迴路

這應該已經解決您的問題外。