본문 바로가기
Studynote/Computer Science 12

09.16 제 6장 객체지향프로그래밍2 실습

by e.sunie 2018. 11. 5.

실습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);

        

        }

}

실행결과

 


댓글