2014-09-29 8 views
1

콘솔에 구성한 체스 보드를 인쇄하는 작업을 받았습니다. 보드는 꼭대기를 가로 질러 'a'와 'h'그리고 왼쪽 아래로 세로로 1-8로 경계 지어 져야합니다. 각 이니셜은 문자와 숫자로 정렬되어야합니다. 예를 들어 블랙 루크 ("bR")는 8에 있어야합니다 (배열에서 [0] [0]으로 초기화되어야합니다). 비효율적 인 문제 (명백한 문자 레이블에 char 배열을 사용해야 함)를 제외하고 printBoard 메서드에서 중첩 된 for 루프는 이니셜을 올바른 위치의 콘솔에 인쇄하지 못하는 이유는 무엇입니까?switch 문이 원하는대로 문자열을 인쇄하지 못하는 이유는 무엇입니까? (Java)

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<1;j++){ 
       System.out.print("\t"); 
       switch(chessboard[i][j]){ 
       case WHITE_KING : System.out.print("WK"); 
       case WHITE_QUEEN : System.out.print("wQ"); 
       case WHITE_ROOK : System.out.print("wR"); 
       case WHITE_BISHOP : System.out.print("wB"); 
       case WHITE_KNIGHT : System.out.print("wK"); 
       case WHITE_PAWN : System.out.print("wP"); 
       case BLACK_KING : System.out.print("BK"); 
       case BLACK_QUEEN : System.out.print("bQ"); 
       case BLACK_ROOK : System.out.print("bR"); 
       case BLACK_BISHOP : System.out.print("bB"); 
       case BLACK_KNIGHT : System.out.print("bK"); 
       case BLACK_PAWN : System.out.print("bP"); 
       case EMPTY : System.out.print("\t"); 
       } //switch 

      } /// j for 

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

    } 

    public static void main(String[] args) { 


     createBoard(); 
     printBoard(chessboard); 

    } 

} 
+6

'case'는 다음 'case'로 들어가는 것을 방지하기 위해 항상 'break'로 끝나야하기 때문에. – hoefling

+2

개개의 사례를 '끊어야'합니다. – nem035

+0

또한 '\ t'의 폭에 대해 몇 가지 가정을 한 것처럼 보입니다. 운이 좋으면 현재 터미널에서 사용할 수 있지만 이식성을 원한다면 올바른 수의 공백을 사용하십시오. – 5gon12eder

답변

3

당신은 스위치 블록의 종료 후 실행을 계속하기 위해 break와 모든 case 문을 종료해야합니다. 그렇지 않으면 다음 케이스 문으로 넘어갑니다.

0

EMPTY의 경우 "\ t"이 (가) 인쇄됩니다. 이것은 당신의 기둥을 이동시킬 것입니다. 다른 조각 유형은 \ t를 출력하지 않으므로 루프에 인쇄됩니다. 따라서, 그냥 인쇄 ("")해야합니다;