끝말잇기를 하는데 있어서 게이머 한명이 탈락 할때, 그 인원을 빼는것을 구현했는데 게이머 한명이 빠진채로 구현이 안됩니다.

조회수 509회

import java.util.Scanner;

class Player{ String name; String answer; static String word = "아버지"; static int lastIndex = word.length()-1;

void showPlayerName() {
    System.out.println(name);
}

void showPlayerAnswer() {
    System.out.println(answer);
}

 int checkSuccess(String answer, char firstChar) {
    if(word.charAt(lastIndex) == firstChar) {
        word = answer;
        lastIndex = word.length() - 1;
        return 1;
    }
    else {
        word = "아버지";
        return 0;
    }
}

}

public class WorldGameApp {

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("참가하는 사람의 수 입력 : ");
    int gamers_num = sc.nextInt();
    Player player[] = new Player[gamers_num];

    for(int i = 0 ; i < gamers_num ; i++) {
        System.out.println("\n" + (i+1) + "번째 선수 이름 입력 : ");
        player[i] = new Player();
        player[i].name = sc.next();
    }

    System.out.println("==========================");
    System.out.println("끝말잇기 시작, 시작단어 : 아버지 ");

    while(true) {

        if(gamers_num == 1) 
            break;


        else {

            for(int i = 0 ; i  < gamers_num ; i++) {
                System.out.println("==========================\n");
                System.out.println(player[i].name + " 차례");

                System.out.println("다음 낱말 입력 : ");
                player[i].answer = sc.next();
                String Answer = player[i].answer;
                char Firstchar = Answer.charAt(0);

                if((player[i].checkSuccess(Answer, Firstchar)) == 1)
                    continue;

                else {
                    System.out.println(player[i].name + "탈락");                      
                    for(int j = i ; j < gamers_num; j++) { //한명 탈락시 탈락자 배열에서 제거
                        player[j] = player[j+1];
                    }
                    System.out.println("==========================");
                    System.out.println("끝말잇기 시작, 시작단어 : 아버지 ");

이부분까지 프린트가 되는데, 위의 for문 보듯이 `` 탈락자자리에 다음 사람 넣어주고 인원수 줄여서 player클래스 배열에는 탈락자는 빠진 상태로 저장이 되는데, 왜 그다음 게임은 진행하지 않나요? 문제가 있을까요?

                    gamers_num--; //게이머 숫자가 하나 감소

                }

            }
        }   
    }
}

}

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 위 소스를 제가 돌려본 게 아니라서 자세하게는 답변 드리기 어렵지만, 대강 읽어만 보자면, 문제는 int gamers_num에 있습니다.

    로직이 전체적으로 gamers_num의 값을 기준으로 for를 돌고 게임 진행이 가능한지 체크하고 그러고 있거든요. 그러다가도 어느 시점에서는 player[i]를 "탈락"시키려고 시도합니다. 그나마도 실제로 일어나는 일은 player[i]player에서 사라지는 것이 아니고 단지 gamers_num--;뿐이거든요. 다시 말하면... 해당 플레이어가 정말로 링에서 내려오는 일은 없고, 단지 전광판 숫자만이 바뀌고 있는 것 같다 이 말입니다.

    자바는 잘 몰라서 구체적인 코드 작성은 못하겠지만, 저보고 다시 짜라고 하면 getNextPlayer(currentPlayer) 메소드를 하나 정의해서 처리하겠습니다. 이 메소드가 Player 인스턴스를 반환할 경우에는 그 인스턴스에 대해서 뭔가 할 수 있을 테고, null이라면 break를 걸면 되겠지요. 그리고 getNextPlayer() 메소드는, 지금 링 위에 올라와 있는 선수가 누구누구인지 인자로 받은 currentPlayer가 링 위에 있는지 그렇다면 다음 선수는 누구인지 그런 거만 전담해서 판별하고 반환하는 메소드가 될 테구요.

    참고가 되면 좋겠네요.

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

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)