끝말잇기를 하는데 있어서 게이머 한명이 탈락 할때, 그 인원을 빼는것을 구현했는데 게이머 한명이 빠진채로 구현이 안됩니다.
조회수 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
가 링 위에 있는지 그렇다면 다음 선수는 누구인지 그런 거만 전담해서 판별하고 반환하는 메소드가 될 테구요.참고가 되면 좋겠네요.
댓글 입력