다음 코드 블록은 사용자가 입력 한 좌표가 우주선의 좌표인지 확인합니다. 배는 (1,1)과 (1,2)에 2 차원 배열로 배치됩니다.Java를 사용하여 Battleship을 만드는 데 문제가 있습니다.
getUserGuess
메서드 구현을 while 루프로 둘러싸면 문제가 시작되었습니다. 루프는 우주선이 아직 살아 있는지 확인하고 우주선이 가라 앉을 때까지 좌표 입력을 계속 요구합니다. 그러나 사용자가 올바른 좌표 쌍 중 하나를 입력하자마자 전체 선박이 가라 앉습니다.
왜 이러한 일이 계속 발생하는지 알 수 없습니다. 루프를 주석 처리하자 마자 문제는 멈추지 만 루프가 필요합니다.
public void checkResult(String userGuess) {
while (frigateIsAlive == true) {
if (userGuess.equalsIgnoreCase(board[1][1])){
System.out.println("hit!");
numOfHitsOnFrigate++;
board[1][1] = " *";
createBoard();
}
if (userGuess.equalsIgnoreCase(board[1][2])) {
System.out.println("hit!");
numOfHitsOnFrigate++;
board[1][2] = " *";
createBoard();
}
else if (numOfHitsOnFrigate == 2) {
System.out.println("Enemy frigate has been sunk!");
frigateIsAlive = false;
break;
}
else {
System.out.println("miss!");
// try again
}
}
}
public String getUserGuess()
{ // takes the users guess
System.out.println("Choose a coordinate on the board to fire at");
int x = input.nextInt();
int y = input.nextInt();
String userGuess = board[x][y];
return userGuess;
}
당신이 더 나은 나를 돕기 위해 코드의 다른 부분을 볼 필요 알려줘 : 여기
는 방법이다.
사용 (frigateIsAlive) 동안 대신 동안 (frigateIsAlive == true)가 –
내가 당신을 뭔가 다른 논리는 결함이 제대로 – KRUKUSA
을 증가시키는 것 확인하기 위해 당신이 numOfHitsonFrigate''의 값을 출력 할 수 numOfHitsOnFrigate 내부 이동하고있다 생각 여기에'while '이 필요 없다.'userGuess'가 루프를 입력하면'board [1] [1]'에 대해 좋은 것으로 가정하고, 처음'if'에서 2 번 지나면 나올 뿐이다. 당신이 원하는 것이 아니라는 것이 확실합니다. –