drexqq

[Java, 자바] 트럼프카드 (52장) 본문

공부노트/개인공부!

[Java, 자바] 트럼프카드 (52장)

drexqq 2020. 5. 26. 13:07
728x90
반응형

Java를 이용하여 무작위로 트럼프 카드를 셔플 해보았다.

 

코드

package work0525;

public class Work01 {

	public static void main(String[] args) {
		// 트럼프카드 52장
		// ( 1 ~ 13 ) * 4
		// A(1) 2 ~ 10 J(11) Q(12) K(13)
		// 0~12 -> Spade, 13~25 Diamond, 26~38 Heart, 39~51 Clover
		
		/*
		 	랜덤번호(0~51) 실제번호(1~13)
		 	숫자 : 13 다이아	-> 1
		 	숫자 : 3  스페이드	-> 4
		*/
		int number[] = new int[52];			// random 번호
		boolean swit[] = new boolean[52];	// 중복 체크
		int r, w;
		
		// init
		for (int i = 0; i < swit.length; i++) {
			// 스위치 초기화
			swit[i] = false;
		}
		w = 0;
		
		// 0 ~ 51 -> 1 ~ 52
		// 셔플, 정렬(효율), 트리, 탐색(속도)
		while (w < 52) {	// 0 ~ 51
			r = (int) (Math.random() * 52);	// 0 ~ 51
			if (swit[r] == false) {
				swit[r] = true;
				number[w] = r;
				w++;
			}
		}
//		for (int i = 0; i < number.length; i++) {
//			System.out.println();
//		}
		
		// 카드종류
		int cardNum;
		int cardPic;
		
		// 숫자
		for (int i = 0; i < number.length; i++) {
			cardNum = number[i] % 13 + 1;

			if (cardNum == 1) {			//A
				System.out.print("card number : " + number[i] + ", " + "A");
			}
			else if (cardNum == 11) {	//J
				System.out.print("card number : " + number[i] + ", " + "J");
			}
			else if (cardNum == 12) {	//Q
				System.out.print("card number : " + number[i] + ", " + "Q");
			}
			else if (cardNum == 13) {	//K
				System.out.print("card number : " + number[i] + ", " + "K");
			}
			else {						// 그 외에 숫자
				System.out.print("card number : " + number[i] + ", " + cardNum);
			}
			
			// 그림
			cardPic = number[i] / 13;	// 0 ~ 3
			
			switch (cardPic) {
				case 0:
					System.out.println(", 스페이드");
					break;
				case 1:
					System.out.println(", 다이아");
					break;
				case 2:
					System.out.println(", 하트");
					break;
				case 3:
					System.out.println(", 클로버");
					break;
			}
		}
	}

}

 

여기서 중요한 점은 이 부분이다

int number[] = new int[52];			// random 번호
boolean swit[] = new boolean[52];	// 중복 체크
int r, w;
		
// init
for (int i = 0; i < swit.length; i++) {
	// 스위치 초기화
	swit[i] = false;
}
w = 0;
		
// 0 ~ 51 -> 1 ~ 52
// 셔플, 정렬(효율), 트리, 탐색(속도)
while (w < 52) {	// 0 ~ 51
	r = (int) (Math.random() * 52);	// 0 ~ 51
	if (swit[r] == false) {
		swit[r] = true;
		number[w] = r;
		w++;
	}
}

 

boolean 배열을 스위치처럼 이용할 수 있다는 점이 신기했다.

 

그 후 swit [] 배열을 통해서 서로 중복되지 않는 52개의 숫자를 얻어낼 수 있었다.

 

이중 for문을 사용해도 좋지만 이 방법도 좋은 것 같다.

728x90
반응형
Comments