Notice
Recent Posts
Recent Comments
Link
drexqq
[Java, 자바] 트럼프카드 (52장) 본문
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
반응형
'공부노트 > 개인공부!' 카테고리의 다른 글
[Java, 자바] 2차원배열을 1차원배열에 담기 (0) | 2020.05.26 |
---|---|
[Java, 자바] 2진수, 10진수, 16진수 계산기 (2) | 2020.05.26 |
[Java, 자바] 성적 통계프로그램.ver2 (0) | 2020.05.26 |
[Java, 자바] 성적 통계프로그램 (0) | 2020.05.26 |
[Java, 자바] 로또숫자 생성기(lotto) (0) | 2020.05.24 |
Comments