자바의 정석 기초편 7-1에 이은
7-2의 연습 문제를 풀어보았습니다
Q) 연습문제 7-1의 SutdaDeck 클래스에 다음에 정의된 새로운 메소드를 추가하고 테스트하시오
1.
메소드명 : Shuffle
기능 : 배열 cards에 담긴 카드의 위치 뒤섞기(Math.random() 이용)
반환타입 : 없음
매개변수 : 없음
2.
메소드명 : Pick
기능 : 배열 cards에서 지정된 위치의 SutdaCard를 반환한다
반환타입 : SutdaDeck
매개변수 : int index (위치)
3.
메소드명 : Pick
기능 : 배열 cards에서 임의의 위치에 SutdatCard를 반환한다(Math.random() 사용)
반환타입 : Sutdadeck
매개변수 : 없음
class SutdaDeck {
final int CARD_NUM = 20;
SutdaCard[] cards = new SutdaCard[CARD_NUM];
//섯다카드 20개의 객체배열
//20장 다 1이고, true라서 다 k가 뜸
SutdaDeck() {
for(int a=0;a<cards.length;a++) {//일단 cards객체 배열의 인스턴스 생성
cards[a] = new SutdaCard();
}
int j=1; //카드 숫자를 세어 10이 넘으면 초기화해줄 변수
for(int i=0;i< cards.length;i++) { //카드 숫자를 부여하기 위해 for문
cards[i].num = j; //j값을 집어넣음
cards[i].isKwang=false; //일단 다 false해서 k를 떼줌
j++; //한번 돌아갈때마다 1씩 증가(1,2,3...이렇게 부여해줘야 하니까
if(j==11) { //j가 11이 되면
j=1; //j를 1로 초기화해줌 1~10 하고 다시 1~10 해주기 위해
}
}
//1,3,8에 광(k)를 붙여주기 위한 for문
for (int i=0;i<10;i++) { //2장씩 들어있는 1,3,8중 한장씩에만 붙이면 되니까 10번만 돌려줌
if(cards[i].num==1||cards[i].num==3||cards[i].num==8) { //카드번호가 1이거나3,8 이라면?
cards[i].isKwang=true; //true값을 줘서 광을 붙여줌
}
}
}
public void shuffle() { //배열cards에 담긴 카드의 위치를 뒤섞는다(Math.random() 사용)
SutdaCard tmp = new SutdaCard(); //중간 다리 역할을 할 인스턴스
for(int i=0;i<cards.length;i++) { //배열 갯수만큼 돌림
int j=(int)(Math.random()* cards.length); //j에 랜덤 숫자 돌림
tmp = cards[i]; //i에 들어있는 객체 tmp에게 넘겨줌
cards[i] = cards[j]; //j(랜덤숫자)는 i에게 넘겨줌
cards[j]=tmp; //tmp에 든 i의 객체는 j에게 넘겨줌
}
}
public SutdaCard pick(int index) { //사용자가 입력한 숫자에 있는 배열값 출력
return cards[index]; //사용자 입력값 반환
}
public SutdaCard pick() { //랜덤한 배열 값 출력
int i=(int)(Math.random()*20); //랜덤 숫자 부여
return cards[i]; //랜덤 숫자 배열 반환
}
}
class SutdaCard {
public boolean cards;
int num; //카드넘버 1~10까지
boolean isKwang; //광이면 true
SutdaCard() {
this(1, true);
}
SutdaCard(int num, boolean isKwang) {
this.num = num;
this.isKwang = isKwang;
}
public String toString() {
return num + (isKwang ? "K" : ""); //isKwang이 true라면 k, 아니라면 ""
}
}
public class Exercise7_1 {
public static void main(String[] args) {
SutdaDeck deck = new SutdaDeck(); //20개의 섯다 카드를 넣은 덱
System.out.println(deck.pick(0)); //첫번째 배열에 있는 숫자 출력
System.out.println(deck.pick()); //랜덤 배열에 있는 숫자 출력
deck.shuffle(); //덱 랜덤으로 돌림
for(int i=0;i<deck.cards.length;i++) { //20번 돌림(출력을 위해)
System.out.print(deck.cards[i]+","); //1~10하고 다시 1~10 나와야함
}
System.out.println();
System.out.println(deck.pick(0)); //첫번째 배열 숫자 출력
}
}
결과
2,3번은 쉬웠는데
1번이 이해 안 돼서 머리 싸매다가
결국 검색했는데 그 코드도 이해 안 돼서
이 짓 하면서
결국 이해하고....풀었다.....
코딩하면서 느낀점
ㄴ 나는 벌레다...나는 밥만 축내는 똥이다....라고 생각하면 나를 좀 덜 미워할 수 있음
728x90
'문제를 풀어보자' 카테고리의 다른 글
JAVA) 자바의 정석 기초편 11-3 연습 문제(Comparable 정렬) (1) | 2022.10.13 |
---|---|
JAVA) 자바의 정석 기초편 7-5 연습문제 풀이 (0) | 2022.10.09 |
JAVA) 자바의 정석 기초편 7-1 연습문제 풀이 (0) | 2022.10.09 |
JAVA) 이것이 자바다 챕터2~11 확인문제 7번~9번 (0) | 2022.10.07 |
JAVA) 이것이 자바다 챕터6 확인문제 20번 (0) | 2022.10.05 |