for문과 if문을 사용해서 처음엔 수월하게 과제를 했다.
하지만 다 만들고 보니 이런 방식으로 나와야 하는데
// 예시
컴퓨터가 숫자를 생성하였습니다. 답을 맞춰보세요!
1번째 시도 : 134
0B0S
2번째 시도 : 238
1B1S
3번째 시도 : 820
2B1S
4번째 시도 : 028
3B
5번째 시도 : 280
3S
4번만에 맞히셨습니다.
게임을 종료합니다.
내 결과물은 배열의 숫자 하나씩 입력해야했다.
// 첫번째 결과물
컴퓨터가 숫자를 생성하였습니다. 답을 맞춰보세요!
1번째 시도 : 1
1번째 시도 : 2
1번째 시도 : 5
0B0S
2번째 시도 : 1
2번째 시도 : 3
2번째 시도 : 6
1B0S
3번째 시도 : 3
3번째 시도 : 6
3번째 시도 : 7
2B0S
4번째 시도 : 3
4번째 시도 : 4
4번째 시도 : 7
2B1S
5번째 시도 : 7
5번째 시도 : 4
5번째 시도 : 3
0B3S
6번만에 맞히셨습니다.
게임을 종료합니다.
음.. 뭔가 잘못됐다.
// 수정 전 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] numbers = new int[3]; // 컴퓨터
int[] userNumbers = new int[3]; // 유저
int count = 1;
for (int i = 0; i < numbers.length; i++) {
numbers[i] = (int) (Math.random() * 9 + 1);
for (int j = 0; j < i; j++) {
if (numbers[i] == numbers[j]) {
i--;
break;
}
}
}
System.out.println("컴퓨터가 숫자를 생성하였습니다. 답을 맞춰보세요!");
while (true) {
int strike = 0;
int ball = 0;
for (int i = 0; i < numbers.length; i++) {
System.out.print(count + "번째 시도 : ");
userNumbers[i] = sc.nextInt();
}
for (int i = 0; i < numbers.length; i++) {
for (int j = 0; j < userNumbers.length; j++) {
if (numbers[i] == userNumbers[j] && i == j) {
strike++;
} else if (numbers[i] == userNumbers[j] && i != j) {
ball++;
}
}
}
System.out.println(ball + "B" + strike + "S");
count++;
if (strike == 3) {
System.out.println(count + "번만에 맞히셨습니다.");
System.out.println("게임을 종료합니다.");
break;
}
}
}
}
코드를 보면 while문 안에 첫번째 for문에서 userNumbers
배열을 하나씩 numbers
배열의 길이만큼 돌리는 방식으로 코드를 적어놔서 이런 결과물이 나오는 것 같았다.
또 count도 맞히고나서 한번 더 도는 것 같으니 count++;
의 위치를 마지막 if문 밑으로 내려야겠다.
// 수정 후 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] numbers = new int[3]; // 컴퓨터
int[] userNumbers = new int[3]; // 유저
int count = 1;
// 무작위 숫자 numbers 생성
for (int i = 0; i < numbers.length; i++) {
numbers[i] = (int) (Math.random() * 9 + 1);
for (int j = 0; j < i; j++) {
if (numbers[i] == numbers[j]) {
i--;
break;
}
}
}
System.out.println("컴퓨터가 숫자를 생성하였습니다. 답을 맞춰보세요!");
while (true) {
int strike = 0;
int ball = 0;
String input = "";
// userNumbers 입력
System.out.print(count + "번째 시도 : ");
input = sc.nextLine();
if(input.length() == 3) {
userNumbers[0] = input.charAt(0)-'0';
userNumbers[1] = input.charAt(1)-'0';
userNumbers[2] = input.charAt(2)-'0';
} else {
continue;
}
// numbers와 userNumbers 비교
for (int i = 0; i < numbers.length; i++) {
for (int j = 0; j < userNumbers.length; j++) {
if (numbers[i] == userNumbers[j] && i == j) {
strike++;
} else if (numbers[i] == userNumbers[j] && i != j) {
ball++;
}
}
}
System.out.println(ball + "B" + strike + "S");
// 종료문구
if (strike == 3) {
System.out.println(count + "번만에 맞히셨습니다.");
System.out.println("게임을 종료합니다.");
break;
}
count++;
}
}
}
String으로 input
을 받아서 그 String 문자을 하나씩 userNumbers
배열에 넣어주는 형식으로 해결했다.
input
은 String이므로 nextInt 대신 nextLine을 쓰니 아주 잘 돌아간다.
// 결과물
컴퓨터가 숫자를 생성하였습니다. 답을 맞춰보세요!
1번째 시도 : 123
1B0S
2번째 시도 : 145
2B0S
3번째 시도 : 146
1B0S
4번째 시도 : 157
1B0S
5번째 시도 : 459
2B0S
6번째 시도 : 458
2B0S
7번째 시도 : 457
2B0S
8번째 시도 : 453
3B0S
9번째 시도 : 534
0B3S
9번만에 맞히셨습니다.
게임을 종료합니다.