Java 배열 연습

xiexie-dev·2023년 9월 9일

배운 내용을 복습 및 추가로 내가 넣어서 해보자는 의미로 해보았다.

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;
			}
		}
	}
}

<결과>
일단 결과가 잘 나오는지 확인하기 위해서 난수를 다 출력해서 바로 맞추는 식으로 했다. 위에 난수 부분은 주석처리로 나오지 않게 해놨으니 참고 바랍니다.

이전 수업에서 거의 비슷하지만 내가 조금 고쳐본 부분이 있다.

1. split사용

		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를 사용했다.

2. out 내용 추가

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맨앞으로 돌아가게 하는방법은 없는건가?...

읻단 응용해보기는 계속 해봐야겠다.

profile
글로벌 프로페셔널 개발자로 성장이 목표

0개의 댓글