실습Time
[7-1]
소스코드 |
class SutdaDeck { final int CARD_NUM = 20; SutdaCard[] cards = new SutdaCard[CARD_NUM];
SutdaDeck() { for(int i=0;i < cards.length;i++) { int num = I % 10 + 1; boolean isKwang = (i < 10)&&(num==1||num==3||num==8); cards[i] = new SutdaCard(num,isKwang); } } }
class SutdaCard { int num; boolean isKwang;
SutdaCard() { this(1, true); }
SutdaCard(int num, boolean isKwang) { this.num=num; this.isKwang = isKwang; }
//info()대신 Object클래스의 toString을 오버라이딩했다. public String toString() { return num + ( isKwang ? "K":""); } }
class SudaCardTest { public static void main(String[] args) { SutdaDeck deck = new SutdaDeck();
for(int i=0; i< deck.cards.length; i++) System.out.print(deck.cards[i]+","); } }
|
실행결과 |
1K,2,3K,4,5,6,7,8K,9,10,1,2,3,4,5,6,7,8,9,10, |
1.배열생성과 인스턴스 생성의 차이
2. 반복문을 이용하여
⦁원하는 num의 값을 얻기 위해서는 i%10+1과 같은 계산식을 사용
i | i%10 | i%10+1 |
1 | 0 | 1 |
2 | 1 | 2 |
3 | 2 | 3 |
4 | 3 | 4 |
5 | 4 | 5 |
6 | 5 | 6 |
7 | 6 | 7 |
8 | 7 | 8 |
9 | 8 | 9 |
10 | 9 | 10 |
11 | 0 | 1 |
12 | 1 | 2 |
13 | 2 | 3 |
14 | 3 | 4 |
15 | 4 | 5 |
16 | 5 | 6 |
17 | 6 | 7 |
18 | 7 | 8 |
19 | 8 | 9 |
20 | 9 | 10 |
3. num의 값이 1,3,8,일 때 한쌍의 카드 중에서 하나는 광이어야한다.
boolean isKwang = (i < 10)&&(num==1||num==3||num==8);
AND(&&)가 OR(||)보다 우선순위가 높기 때문에 괄호를 꼭 사용해야 한다.
만일 I의 값이 2이고 num의 값이 3이라면
boolean isKwang = ( 2 < 10)&&( 3==1 || 3==3 || 3==8);
→boolean isKwang = (true) && (false|| true || false);
→boolean isKwang = (true) && (true || false);
→boolean isKwang = (true) && (true);
→boolean isKwang = true;
[7-2]
소스코드 |
class SutdaDeck { final int CARD_NUM = 20; SutdaCard[] cards = new SutdaCard[CARD_NUM];
SutdaDeck() { for(int i=0;i < cards.length;i++) { int num = i%10+1; boolean isKwang = (i < 10)&&(num==1||num==3||num==8); cards[i] = new SutdaCard(num,isKwang); } }
void shuffle() { for(int x = 0; x< cards.length*2;x++) { //배열 index의 범위 내의 임의의 두값을 얻는다. int i = (int)(Math.random()*cards.length); int j = (int)(Math.random()*cards.length);
//cards[i]와 cards[j]의 값을 서로 바꾼다. SutdaCard tmp = cards[i]; cards[i] = cards[j]; cards[j] = tmp; } }
SutdaCard pick(int index) { if(index<0 || index >= CARD_NUM) //index의 유효성을 검사한다. return null; return cards[index]; }
SutdaCard pick() { int index = (int)(Math.random()*cards.length); return pick(index); //pick(int index)를 호출한다. } }
class SutdaCard { int num; boolean isKwang;
SutdaCard() { this(1, true); }
SutdaCard(int num, boolean isKwang) { this.num=num; this.isKwang = isKwang; }
//info()대신 Object클래스의 toString을 오버라이딩했다. public String toString() { return num + ( isKwang ? "K":""); } }
class SudaCardTest2 { public static void main(String[] args) { SutdaDeck deck = new SutdaDeck();
System.out.println(deck.pick(0)); System.out.println(deck.pick()); deck.shuffle();
for(int i=0; i< deck.cards.length; i++) System.out.print(deck.cards[i]+",");
System.out.println(); System.out.println(deck.pick(0)); } }
|
실행결과 |
1K 1 4,2,8,10,8K,2,3K,9,9,5,6,1,7,4,1K,3,6,7,10,5, 4 |
[7-10]
소스코드 |
class MyTv2 { private boolean isPowerOn; private int channel; private int volume; final int MAX_VOLUME = 100; final int MIN_VOLUME = 0; final int MAX_CHANNEL = 100; final int MIN_CHANNEL = 1;
public void setVolume(int volume) { if( volume > MAX_VOLUME || volume < MIN_VOLUME ) return; this.volume = volume; }
public int getVolume() { return volume; }
public void setChannel(int channel) { if( channel > MAX_CHANNEL || channel < MIN_CHANNEL ) return; this.channel=channel;
}
public int getChannel() { return channel; }
public void setIsPowerOn(boolean isPowerOn) { this.isPowerOn = isPowerOn; }
public boolean getIsPowerOn() { return isPowerOn; }
}
class MyTv2Test { public static void main(String[] args) { MyTv2 t = new MyTv2();
t.setIsPowerOn(true); System.out.println("PW : " + t.getIsPowerOn()); t.setChannel(10); System.out.println("CH : " + t.getChannel()); t.setVolume(20); System.out.println("VOL : " + t.getVolume()); } }
|
실행결과 |
PW : true CH : 10 VOL : 20 |
[7-11]
소스코드 |
class MyTv2 { private boolean isPowerOn; private int channel; private int volume; int prevChannel; final int MAX_VOLUME = 100; final int MIN_VOLUME = 0; final int MAX_CHANNEL = 100; final int MIN_CHANNEL = 1;
public void setVolume(int volume) { if( volume > MAX_VOLUME || volume < MIN_VOLUME ) return; this.volume = volume; }
public int getVolume() { return volume; }
public void setChannel(int channel) { if( channel > MAX_CHANNEL || channel < MIN_CHANNEL ) return;
prevChannel = this.channel; //현재채널을 이전채널에 저장 this.channel = channel;
}
public void gotoPrevChannel() {
setChannel(prevChannel); //현재채널을 이전채널로 변경
}
public int getChannel() { return channel; }
public void setIsPowerOn(boolean isPowerOn) { this.isPowerOn = isPowerOn; }
public boolean getIsPowerOn() { return isPowerOn; }
}
class MyTv2Test2 { public static void main(String[] args) { MyTv2 t = new MyTv2();
t.setIsPowerOn(true); System.out.println("PW : " + t.getIsPowerOn()); t.setChannel(10); System.out.println("CH : " + t.getChannel()); t.setChannel(20); System.out.println("CH : " + t.getChannel()); t.gotoPrevChannel(); System.out.println("CH : " + t.getChannel()); t.gotoPrevChannel(); System.out.println("CH : " + t.getChannel()); } }
|
실행결과 |
PW : true CH : 10 CH : 20 CH : 10 CH : 20 |
[7-14]
소스코드 |
class SutdaCard { final int NUM; final boolean IS_KWANG;
SutdaCard() { this(1, true); }
SutdaCard(int num, boolean isKwang) { this.NUM = num; //생성자에서 단 한번의 초기화 가능 this.IS_KWANG = isKwang; //생성자에서 단 한번의 초기화 가능 }
public String toString() { return NUM + ( IS_KWANG ? "K":""); } }
class SutdaCardTest3 { public static void main(String args[]) {
SutdaCard card = new SutdaCard(1, true);
} } |
실행결과 |
|
'Studynote > Computer Science 12' 카테고리의 다른 글
10.07. 제 9장 java패키지 (0) | 2018.11.05 |
---|---|
09.23 제 7장 객체지향프로그래밍2-2 (0) | 2018.11.05 |
09.16 제6장 객체지향프로그래밍2 (0) | 2018.11.05 |
09.09. 6장 객체지향프로그래밍1 실습 (0) | 2018.11.05 |
09.09 6장 Java객체지향프로그래밍1 (0) | 2018.11.05 |
댓글