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 r = i%10+1;
boolean isKwang = i<10 && ((r==1)||(r==2)||(r==3)) ? true : false;
cards[i] = new SutdaCard(r, isKwang);
}
}
}
class SutdaCard {
int num;
boolean isKwang;
public SutdaCard() {
this(1, true);
}
public SutdaCard(int num, boolean isKwang) {
this.num = num;
this.isKwang = isKwang;
}
public String toString() {
return num + (isKwang ? "K":"");
}
}
public class Exercise7_1 {
public static void main(String[] args) {
SutdaDeck deck = new SutdaDeck();
for(int i=0; i<deck.cards.length; i++) {
System.out.printf(deck.cards[i]+",");
}
}
}
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 r = i%10+1;
boolean isKwang = i<10 && ((r==1)||(r==3)||(r==8)) ? true : false;
cards[i] = new SutdaCard(r, isKwang);
}
}
public SutdaCard pick(int index) {
return cards[index];
}
public SutdaCard pick() {
int r = (int)(Math.random()*20);
return cards[r];
}
public void shuffle() {
// 카드 위치 변경
SutdaCard temp;
int r=0;
for(int i=0; i<cards.length; i++) {
r = (int)(Math.random()*20);
temp = cards[i];
cards[i] = cards[r];
cards[r] = temp;
}
}
}
class SutdaCard {
int num;
boolean isKwang;
public SutdaCard() {
this(1, true);
}
public SutdaCard(int num, boolean isKwang) {
this.num = num;
this.isKwang = isKwang;
}
public String toString() {
return num + (isKwang ? "K":"");
}
}
public class Exercise7_2 {
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.printf(deck.cards[i]+",");
}
System.out.println();
System.out.println(deck.pick(0));
}
}
7_3)
에러 발생이유와 수정
Tv를 생성하면 Tv의 기본생성자가 호출되는데 생성자의 맨 처음에는
부모클래스의 생성자 super()가 호출된다. super()가 없으면 컴파일러가 자동으로 추가해주는데
부모클래스인 Product에는 기본생성자가 없으므로 에러가 발생한다.
수정 1) Product클래스에 기본생성자 Product() { }를 추가
수정 2)
class Product {
int price; // 제품의 가격
int bonusPoint; // 제품구매 시 제공하는 보너스점수
//Product() {}
Product(int price) {
this.price = price;
bonusPoint =(int)(price/10.0);
}
}
class Tv extends Product {
Tv(int price) {
super(10);
}
public String toString() {
return "Tv";
}
}
class Exercise7_3 {
public static void main(String[] args) {
Tv t = new Tv(10);
}
}
7_4)
class MyTv {
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 boolean isPowerOn() {
return isPowerOn;
}
public void setPowerOn(boolean isPowerOn) {
this.isPowerOn = isPowerOn;
}
public int getChannel() {
return channel;
}
public void setChannel(int channel) {
// 유효성 검사
if(channel>MAX_CHANNEL || channel<MIN_CHANNEL) {
return;
}
this.channel = channel;
}
public int getVolume() {
return volume;
}
public void setVolume(int volume) {
// 유효성 검사
if(volume>MAX_VOLUME || volume<MIN_VOLUME) {
return;
}
this.volume = volume;
}
}
class Exercise7_4 {
public static void main(String[] args) {
MyTv t = new MyTv();
t.setChannel(10);
System.out.println("CH:"+t.getChannel());
t.setVolume(20);
System.out.println("VOL:"+t.getVolume());
}
}
7_5)
class MyTv2 {
private boolean isPowerOn;
private int channel;
private int volume;
private int prevChannel=0;
final int MAX_VOLUME = 100;
final int MIN_VOLUME = 0;
final int MAX_CHANNEL = 100;
final int MIN_CHANNEL = 1;
public boolean isPowerOn() {
return isPowerOn;
}
public void setPowerOn(boolean isPowerOn) {
this.isPowerOn = isPowerOn;
}
public int getChannel() {
return channel;
}
public void setChannel(int channel) {
// 유효성 검사
if(channel>MAX_CHANNEL || channel<MIN_CHANNEL) {
return;
}
prevChannel = this.channel;
this.channel = channel;
}
public int getVolume() {
return volume;
}
public void setVolume(int volume) {
// 유효성 검사
if(volume>MAX_VOLUME || volume<MIN_VOLUME) {
return;
}
this.volume = volume;
}
public void gotoPrevChannel() {
// 현재 채널을 이전 채널로 변경
setChannel(prevChannel);
}
}
class Exercise7_5 {
public static void main(String[] args) {
MyTv2 t = new MyTv2();
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());
}
}
7_6)
class Outer { // 외부클래스
class Inner { // 내부클래스
int iv = 100;
}
}
class Exercise7_6 {
public static void main(String[] args) {
// 내부 클래스(인스턴스 클래스)의 인스턴스를 생성하기 위해서는 먼저 외부클래스의
// 인스턴스를 생성해야함
// 인스턴스 클래스는 외부 클래스의 인스턴스 변수처럼
// 외부 클래스의 인스턴스가 생성되어야 쓸 수 있음
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
System.out.println(inner.iv);
}
}
7_7)
class Outer { // 외부클래스
static class Inner { // 내부클래스
int iv = 200;
}
}
class Exercise7_7 {
public static void main(String[] args) {
// static inner class는 인스턴스 클래스와 달리 외부 클래스의 인스턴스를
// static멤버를 인스턴스 생성없이 사용할수있는것처럼 생성하지 않고도 사용 가능
Outer.Inner inner = new Outer.Inner();
System.out.println(inner.iv);
}
}
7_8)
class Outer { // 외부클래스
int value = 10;
class Inner {
int value = 20;
void method1() {
int value = 30;
System.out.println(value);
System.out.println(this.value);
System.out.println(Outer.this.value);
// 외부클래스의 인스턴스변수는 내부클래스에서 외부클래스이름.this.변수이름으로 접근 가능
}
}
}
class Exercise7_8 {
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.method1();
}
}
7_9)
// 일시적으로 한번만사용되는 클래스
// 재사용성이 없고 확장성을 활용하는 것이 유지보수에서 더 불리할 때
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
class Exercise7_9 {
public static void main(String[] args) {
Frame f = new Frame();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
e.getWindow().setVisible(false);
e.getWindow().dispose();
System.exit(0);
}
});
}
}
'Study > Java' 카테고리의 다른 글
Chapter09.java.lang 패키지 (0) | 2023.07.16 |
---|---|
Chapter08.예외처리 (0) | 2023.07.09 |
Chapter06.객체지향 프로그래밍1(2) (0) | 2023.07.09 |
Chapter06. 객체지향 프로그래밍I(1) (0) | 2023.06.25 |
03. 연산자 (0) | 2023.04.03 |
댓글