본문 바로가기
IT/프로그래밍

명품 JAVA Programming 연습문제 5장

by nutrient 2020. 11. 28.
728x90
728x170

명품 JAVA Programming 연습문제 5장

 

1.다음 그림과 같은 상속 구조를 갖는 클래스를 설게하라. 모든 프린터는 모델명, 제조사, 인터페이스 종류(USB 또는 병렬 인터페이스), 인쇄 매수, 인쇄 종이 잔량을 나타내는 정보를 가지며 print()라는 메소드를 갖는다. 잉크젯 프린터는 잉크 잔량이라는 추가 정보를 가지며 레이저 프린터는 토너 잔량이라는 추가 정보를 가진다. print()메소드는 각 프린터 타입에 맞게 구현한다. 이러한 클래스를 설계하고 적절한 필드, 생성자, 메소드를 작성하고, 실행 프로그램을 작성하여 동작을 확인하라.

프린터

▼--------(상속)--------▼
잉크젯 프린터              레이저 프린터

 


import java.util.Scanner;

class P

{

        String name="";

        String made="";

        String taip="";

        int mesu=0;

        int jan=0;



        void print()

        {

                --jan

                System.out.println("인쇄 중입니다");

                System.out.println("프린터 이름 : " +name);

                System.out.println("제조 회사 : " +made);

                System.out.println("인터페이스 타입 : " +taip);

                System.out.println("인쇄 매수 : " +mesu);

                System.out.println("잔여 종이 : " +jan);

                System.out.println("");

        }

}



class inkP extends P

{

        int inkjan=100;

        void print(int inkjan)

        {

                --jan

                --inkjan;

                System.out.println("인쇄 중입니다");

                System.out.println("프린터 이름 : " +name);

                System.out.println("제조 회사 : " +made);

                System.out.println("인터페이스 타입 : " +taip);

                System.out.println("인쇄 매수 : " +mesu);

                System.out.println("잔여 종이 : " +jan);

                System.out.println("잉크 잔량 : " + inkjan);

                System.out.println("");



        }

}

















class tonerP extends P

{

        int tonerjan=100;

        void print(int tonerjan)

        {

                --jan

                --tonerjan;

                System.out.println("인쇄 중입니다");

                System.out.println("프린터 이름 : " +name);

                System.out.println("제조 회사 : " +made);

                System.out.println("인터페이스 타입 : " +taip);

                System.out.println("인쇄 매수 : " +mesu);

                System.out.println("잔여 종이 : " +jan);

                System.out.println("토너 잔량 : " + tonerjan);



        }

}





public class Print

{



        public static void main(String[] args)

        {

                Scanner input = new Scanner(System.in);

                System.out.println("몇장 인쇄 하시겠습니까?");

                int G = input.nextInt();



                inkP A = new inkP();

                A.name = "ABC-1234"

                A.made = “SamSung"

                A.taip = "USB"

                A.mesu = G;

                A.jan = 100;

                A.inkjan = 100;





                tonerP B = new tonerP();

                B.name = "DEF-5678"

                B.made = "LG"

                B.taip = "USB"

                B.mesu = G;

                B.jan = 500;

                B.tonerjan = 100;





                while( G != 0)

                {

                        A.print(100);

                        B.print(100);

                        G--;

                }





        }



}

 

2. 4장 연습문제 중 하나를 수정하여 완성해보자. 더하기(+), 빼기(-), 곱하기(*), 나누기(/)를 수행하는 각 클래스 Add, Sub, Mul, Div를 만들어라. 이들은 모두 다음 필드와 메소드를 가진다.



0. int 타입의 a,b 필드 : 연산하고자 하는 피 연산자
0. void setValue(int a, int b) : 피연산자를 객체 내에 설정한다.
0. int calculate() : 해당 클래스의 목적에 맞는 연산ㅇ르 실행하고 그 결과를 리턴한다.

 

import java.util.Scanner;



abstract class Calc

{

int a

int b



void setValue(int a, int b)

 {

  this.a = a;

  this.b = b;

 }



abstract int calculate();



}



class Add extends Calc

{



int calculate()

 {

  return a + b

 }



}















class Sub extends Calc

{



int calculate()

 {

  return a - b



 }



}



class Mul extends Calc

{

int calculate()

 {

  return a * b

 }

}



class Div extends Calc

{

int calculate()

 {

  return a / b

 }

}



public class Calculate

{

public static void main (String[] args)

 {

  Scanner s = new Scanner(System.in);

  System.out.print("두 정수와 연산자를 입력하시오.>> ");

  int a = s.nextInt();

  int b = s.nextInt();

  String sign = s.next();

  if(sign.equals("+"))

  {

   Add add = new Add();

   add.setValue(a, b);

   System.out.println(add.calculate());

  }



  else if(sign.equals("-"))

  {

   Sub sub = new Sub();

   sub.setValue(a, b);

   System.out.println(sub.calculate());

  }



  else if(sign.equals("*"))

  {

   Mul mul = new Mul();

   mul.setValue(a, b);

   System.out.println(mul.calculate());

  }



  else if(sign.equals("/"))

  {

   Div div = new Div();

   div.setValue(a, b);

   System.out.println(div.calculate());

  }

 }

}

 

 

3. 다음 Stack 인터페이스를 구현하며 스택의 원소로는 문자열(String)을 갖는 StringStack클래스를 작성하라. 그리고 StringStack에 문자열을 삽입하고 다시 pop하여 문자열을 출력하는 main()메소드를 구현하여 프로그램을 완성하라.

 

public interface Stack

{

        public int length();

        public Object pop();

        public boolean push(Object ob);

}



import java.util.Scanner;



interface Stack

{

public int length();

public Object pop();

public boolean push(Object ob);

}



class StringStack implements Stack

{

 Object stack

public StringStack()

 {

  this.stack = ""

 }



public int length()

 {

  return stack.toString().length();

 }



public Object pop()

 {

  return stack

 }



public boolean push(Object ob)

 {

  this.stack = ob;

  if(this.stack.equals(""))

   return false;



  else

   return true;

 }



}









public class munje

{

public static void main(String[] args)

 {

  Scanner sc = new Scanner(System.in);

  StringStack s = new StringStack();



  System.out.print("입력 : ");

  String string = sc.next();



  s.push(string);

  System.out.println("출력 : " + s.pop());

  System.out.println("길이 : " + s.length());



 }



}

 

4. main() 함수를 다음과 같이 수행할 수 있도록 하기 위한 Cpoint 클래스와 CColorPoint 클래스를 작성하고 전체 프로그램을 완성하라. CColorPoint 클래스의 어떤 메소드에서도 System,out.println()을 호출해서는 안 된다. CPoint 클래스는 생성자가 오직 하나뿐이다.

 

public void main(String[] arg)

{

        Cpoint a,b;

        a = new Cpoint(2,3);

        b = new CColorPoint(3,4,“red”);

        a.show();

        b.show();

        System.out.println(a);

        System.out.println(b);

}



class CPoint

 {

int a, b



public CPoint(int a, int b)

 {

  this.a = a;

  this.b = b;

 }



void show()

 {

  System.out.println( "(" + a + " , " + b + ")" );

 }



 



public String toString()

 {

  return "(" + a + " , " + b + ") 입니다." ;

 }



}



class CColorPoint extends CPoint

 {

 String color;



public CColorPoint(int a, int b, String color)

 {

  super(a, b);

  this.color = color;

 }



void show()

 {

  System.out.println("(" + a + " , " + b + " , " + color + ")");

 }



}



public class CC

 {

public static void main(String[] args)

 {

  CPoint a, b;

  a = new CPoint(2, 3);

  b = new CColorPoint(3, 4, "red");

  a.show();

  b.show();

  System.out.println(a);

  System.out.println(b);

 }



}

 

5.추상 클래스의 서브 클래스ㅡ 만들기에 필요한 추상 메소드 오버라이딩과 super()의 사용에 관한 문제이다. 다음과 같은 MyPoint 추상 클래스가 있다.

 


abstract class MyPoint

{

        int x;

        int y;

        public MyPoint(int x, int y)

        {

                this,x = x;

                this.y – y;

        }



        protected abstract void move(int x, int y);

        protected abstract void reverse();

        protected void show()

        {

                System.out.println(x + “,” + y);

        }

}


MyPoint를 상속받는 MyColorPoint 클래스를 작성하라. MyColorPoint의 생성자는 MyColorPoint(int x, int y, String color)로 하라. 그리고 다음과 같은 Main() 메소드를 삽입하여 실행되도록 하라.

 

public static void main(String[] args)

{

        MyPoint p = new MycolorPoint(2,3, “blue”);

        p.move(3,4);

        p.reverse();

        p.show();

}


abstract class MyPoint

 {

int x

int y



public MyPoint(int x, int y)

 {

  this.x = x; this.y = y;

 }



protected abstract void move(int x, int y);  // 새로운 x, y 위치로 이동



protected abstract void reverse();   // (x, y)에서 (y, x)로 위치 변경



protected void show()

 {

  System.out.println(x + "," + y);

 }



}



class MyColorPoint extends MyPoint

 {

 String color



public MyColorPoint(int x, int y, String color)

 {

  super(x, y);

  this.color = color;

 }



protected void move(int x, int y)

 {

  this.x = x; this.y = y;

 }



protected void reverse()

 {

  int temp = x

  x = y

  y = temp;

 }



protected void show()

 {

  System.out.println(x + " , " + y + " , " + color);

 }



}



public class DD

 {

public static void main(String[] args)

 {

  MyPoint p = new MyColorPoint(2, 3, "blue");

  p.move(3, 4);

  p.reverse();

  p.show();

 }



}


6. 간단한 그래픽 편집기를 콘솔 바탕으로 만들어보자. 본문의 5.6절의 메소드 오버라이딩과 5.7절은 추상 클래스의 설명 중에 Line, Rect, Circle의 도형 객체럴 DObject클래스를 상속받아 draw()메소드를 오버라이딩하도록 구성하였다. 이 예제를 완성 해보자. DObject를 추상 메소드 draw()를 가진 추상 클래스로 만들어라. 그래픽 편집기의 기능은 “삽입”, “삭제”, “모두 보기”, “종료”의 4가지 이다.

 

 
728x90
그리드형

댓글