배운 내용을 복습 및 추가로 내가 넣어서 해보자는 의미로 해보았다.
package Self;
import java.util.Scanner;
public class Ex3_baseball {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc= new Scanner(System.in);
int []com= new int[3];
int []user=new int[3];
int ball, strike,out;
String num;
//난수 구하기
for(int i=0; i<com.length; i++)
{
com[i]=(int)(Math.random()*9)+1;
for(int j=0;j<i; j++)
{
if(com[i]==com[j])
{
i--;
break;
}
}
}
// 난수 값 출력
// System.out.printf("%d%d%d\n",com[0],com[1],com[2]);
out=0;
while(true)
{
//입력값
System.out.println(">>>");
num=sc.nextLine();
//종료 부분
if(num.equalsIgnoreCase("q"))
{
System.out.println("야구를 종료합니다.");
break;
}
//배열에 넣기 split사용
for(int i=0; i<user.length;i++) {
user[i]=Integer.parseInt(num.split("")[i]);
}
ball=0;
strike=0;
//같은 위치, 같은 숫자 = strike, 같은 숫자만 나올 경우 ball
for(int i=0; i<3; i++)
{
for(int j=0; j<3; j++)
{
if(com[i]==user[j])
{
if(i==j)
{
strike++;
}else {
ball++;
break;
}
}
}
}
System.out.printf("ball: %d, strike: %d",ball,strike);
System.out.println();
if (strike == 3) {
out++;
System.out.println("아웃!");
System.out.printf("out: %d", out);
System.out.println();
// 다시 난수를 생성하고 게임이 계속되도록 설정
for (int i = 0; i < com.length; i++) {
com[i] = (int) (Math.random() * 9) + 1;
for (int j = 0; j < i; j++) {
if (com[i] == com[j]) {
i--;
break;
}
}
}
System.out.println();
// 난수 값 출력
// System.out.printf("%d%d%d\n", com[0], com[1], com[2]);
}
if(out==3)
{
System.out.println("공수 전환");
break;
}
}
}
}
<결과>
일단 결과가 잘 나오는지 확인하기 위해서 난수를 다 출력해서 바로 맞추는 식으로 했다. 위에 난수 부분은 주석처리로 나오지 않게 해놨으니 참고 바랍니다.

이전 수업에서 거의 비슷하지만 내가 조금 고쳐본 부분이 있다.
for(int i=0; i<user.length;i++) {
user[i]=Integer.parseInt(num.split("")[i]);
// System.out.printf("%d",user[i]);
}
//strNum의 각 숫자를 user배열에 정수형태로 넣기
user[0]=strNum.charAt(0)-'0'; //문자 1은 정수로 49(아스키코드)이다. 문자 1 - 문자 0 = 숫자 1 (49-48=1)
user[1]=strNum.charAt(1)-'0';
user[2]=strNum.charAt(2)-'0';
간결해진걸까? 일단은 for문을 돌리고 split를 사용했다.
out=0 //초기화
while(true)
//이하 내용은 위에와 같은
//추가된 내용
if (strike == 3) {
out++;
System.out.println("아웃!");
System.out.printf("out: %d", out);
System.out.println();
// 다시 난수를 생성하고 게임이 계속되도록 설정
for (int i = 0; i < com.length; i++) {
com[i] = (int) (Math.random() * 9) + 1;
for (int j = 0; j < i; j++) {
if (com[i] == com[j]) {
i--;
break;
}
}
}
System.out.println();
// System.out.printf("%d%d%d\n", com[0], com[1], com[2]);
}
if(out==3)
{
System.out.println("공수 전환");
break;
}
스트라이크가 3번이면 아웃이 뜨고 아웃이 증가되도록 코드를 만들었다.
여기서 아래에 보면 다시 난수를 구하는 for문이 나온다.
아웃이 되었지만 다시 난수를 발생해서 위에 내용들이 다시 반보되어서 마지막에 out==3이 되었을때 공수 전환이라는 말과 함께 게임이 종료 된다.
난수를 다시 발생하는 for을 넣지 않고 while맨앞으로 돌아가게 하는방법은 없는건가?...
읻단 응용해보기는 계속 해봐야겠다.