오셀로 board제작중 닥친 난관

조회수 47회

어제부로 오셀로 프로그램 제작에 돌입한 늅늅입니다. 다른게 아니라 분명 f = EMPRY; 코드로 모든 배열을 " º "로 초기화 시켜주었는데도 불구하고 출력결과 모든 배열이 null화 되어있습니다. 어디서 잘못된걸까요?

package project;
import java.util.Arrays;


public class Main{
    private static final int BOARD_SIZE = 8;
    private static final String WHITE = "●";
    private static final String BLACK = "○";
    private static final String EMPRY = " º "; 

    public static void main(String[] args){
        String[][] board = new String[BOARD_SIZE][BOARD_SIZE];
        startGame(board);
    }
    private static void startGame(String[][] input){
        for(String e[] : input){
            for(String f : e){
                f = EMPRY;
            }
        }
        for(String e[] : input){
            for(String f : e){
                System.out.print(f);
            }
            System.out.println();
        }
    }
}

2 답변

  • 문자열은 상수입니다. 변경불가능하다는 의미입니다.

    "" 로 만드는 순간 jvm 내 constant pool 에 생성됩니다.

    f = EMPRY 를 하는 순간 다른 주소(EMPRY 문자열 주소)를 가리키게 됩니다.

    원하는 바를 하려면 f = EMPRY 후 배열에 f를 대입해야 합니다.

    • 아하! 그럼 For each 구문이 아닌 평범한 for 문을 사용하게 된다면 문제가 말끔히 해결되겠군요! Coby 2020.1.14 23:19
  • 아래와 같은 식이면 되겠죠

    jshell> int BOARD_SIZE = 8
    jshell> String[][] board = new String[BOARD_SIZE][BOARD_SIZE]
    
    jshell> for(String[] arr : board) for(int i = 0; i < BOARD_SIZE; i++) arr[i] = "0"
    
    jshell> board
    board ==> String[8][] { String[8] { "0", "0", "0", "0", "0", "0", "0", "0" }, String[8] { "0", "0", "0", "0", "0", "0", "0", "0" }, String[8] { "0", "0", "0", "0", "0", "0", "0", "0" }, String[8] { "0", "0", "0", "0", "0", "0", "0", "0" }, String[8] { "0", "0", "0", "0", "0", "0", "0", "0" }, String[8] { "0", "0", "0", "0", "0", "0", "0", "0" }, String[8] { "0", "0", "0", "0", "0", "0", "0", "0" }, String[8] { "0", "0", "0", "0", "0", "0", "0", "0" } }
    
    jshell> for(String[] arr : board) for(int i = 0; i < BOARD_SIZE; i++) arr[i] = "1"
    
    jshell> board
    board ==> String[8][] { String[8] { "1", "1", "1", "1", "1", "1", "1", "1" }, String[8] { "1", "1", "1", "1", "1", "1", "1", "1" }, String[8] { "1", "1", "1", "1", "1", "1", "1", "1" }, String[8] { "1", "1", "1", "1", "1", "1", "1", "1" }, String[8] { "1", "1", "1", "1", "1", "1", "1", "1" }, String[8] { "1", "1", "1", "1", "1", "1", "1", "1" }, String[8] { "1", "1", "1", "1", "1", "1", "1", "1" }, String[8] { "1", "1", "1", "1", "1", "1", "1", "1" } }
    

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.