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

명품 JAVA Programming 5장 실습문제 정답

by nutrient 2020. 12. 12.
728x90
728x170

 

명품 JAVA Programming 5장 실습문제 정답

 

명품 JAVA Programming 5장 실습문제 정답

 

1번, 2번

public class TV {
    private int size;

    public TV(int size) {
        this.size = size;
    }

    protected int getSize() {
        return size;
    }
 }


 class ColorTV extends TV {
    public int color;

    public ColorTV(int size, int color) {
        super(size);
        this.color = color;
    }

    public void printProperty() {
        System.out.println(getSize() + "인치 " + color + "컬러");
    }

    public static void main(String[] args) {
        ColorTV myTV = new ColorTV(32, 1024);
        myTV.printProperty();
    }
 }


 class IPTV extends ColorTV {
    String address;

    public IPTV(String address, int size, int color) {
        super(size, color);
        this.address = address;
    }

    public void printProperty() {
        System.out.println("나의 IPTV는 " + address + " 주소의 " + getSize() + "인치 " + color + "컬러");
    }

    public static void main(String[] args) {
        IPTV iptv = new IPTV("192.1.1.2", 32, 2048);
        iptv.printProperty();
    }
 }

3번

import java.util.Scanner;

abstract class Converter {
    abstract protected double convert(double src);

    abstract protected String srcString();

    abstract protected String destString();

    protected double ratio;

    public void run() {
        Scanner scanner = new Scanner(System.in);
        System.out.println(srcString() + "을 " + destString() + "로 바꿉니다.");
        System.out.print(srcString() + "을 입력하세요>> ");
        double val = scanner.nextDouble();
        double res = convert(val);
        System.out.println("변환 결과: " + res + destString() + "입니다");
        scanner.close();
    }
}


class Won2Dollar extends Converter {
    public Won2Dollar(double ratio) {
        this.ratio = ratio;
    }

    @Override
    protected double convert(double src) {
        return src / ratio;
    }

    @Override
    protected String srcString() {
        return "원";
    }

    @Override
    protected String destString() {
        return "달러";
    }

    public static void main(String args[]) {
        Won2Dollar toDollar = new Won2Dollar(1200);
        toDollar.run();
    }
}

4번

5번

class Point {
    private int x, y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    protected void move(int x, int y) {
        this.x = x;
        this.y = y;
    }
 }

 class ColorPoint extends Point {
    private String color;

    public ColorPoint(int x, int y, String color) {
        super(x, y);
        this.color = color;
    }

    public void setXY(int x, int y) {
        move(x, y);
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String toString() {
        return color + "색의 {" + getX() + "," + getY() + ")의점";
    }
 }

public class Pointex {
    public static void main(String[] args) {
        ColorPoint cp = new ColorPoint(5, 5, "YELLOW");
        cp.setXY(10, 20);
        cp.setColor("RED");
        String str = cp.toString();
        System.out.println(str + "입니다.");
    }
 }

6번

class Point2 {
    private int x, y;

    public Point2() {
        this.x = 0;
        this.y = 0;
    }

    public Point2(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    protected void move(int x, int y) {
        this.x = x;
        this.y = y;
    }
 }

 class ColorPoint2 extends Point2 {
    private String color;

    public ColorPoint2() {
        this.color = "Black";
    }

    public ColorPoint2(int x, int y) {
        super(x, y);
    }

    public void setXY2(int x, int y) {
        move(x, y);
    }

    public void setColor2(String color) {
        this.color = color;
    }

    public String toString2() {
        return color + "색의 {" + getX() + "," + getY() + ")의점";
    }
 }

public class Pointex2 {
    public static void main(String[] args) {
        ColorPoint2 zeroPoint = new ColorPoint2();
        System.out.println(zeroPoint.toString2() + "입니다.");
        ColorPoint2 cp = new ColorPoint2(10, 10);
        cp.setXY2(5, 5);
        cp.setColor2("RED");
        System.out.println(cp.toString2() + "입니다");
    }
 }

 

7번

class Point {
    private int x, y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    protected void move(int x, int y) {
        this.x = x;
        this.y = y;
    }
}


 public class Point3D extends Point {
    private int z;

    public Point3D(int x, int y, int z) {
        super(x, y);
        this.z = z;
    }

    public int getZ() {
        return z;
    }

    public void moveUp() {
        z++;
    }

    public void moveDown() {
        z--;
    }

    public void move(int x, int y, int z) {
        move(x, y);
        this.z = z;
    }

    public String toString() {
        return "(" + getX() + "," + getY() + "," + getZ() + ")의 점";
    }

    public static void main(String[] args) {
        Point3D p = new Point3D(1, 2, 3);
        System.out.println(p.toString() + "입니다.");

        p.moveUp();
        System.out.println(p.toString() + "입니다.");

        p.moveDown();
        p.move(10, 10);
        System.out.println(p.toString() + "입니다.");

        p.move(100, 200, 300);
        System.out.println(p.toString() + "입니다.");
    }
}

8번

class Point {
	private int x, y;
	public Point(int x, int y) { this.x = x; this.y = y; }
	public int getX() { return x; }
	public int getY() { return y; }
	protected void move(int x, int y) { this.x = x; this.y = y; }
}

public class PositivePoint extends Point {
	public PositivePoint() {
		super(0, 0);
	}
	public PositivePoint(int x, int y) {
		super(x, y);
		if(x < 0 || y < 0) // 만일 x나 y가 음수이면
			super.move(0, 0); // 다시 (0,0)으로 이동
	}	

	@Override
	protected void move(int x, int y) { // Point의 move() 오버라이딩
		if(x > 0 && y > 0)
			super.move(x, y);
		else
			return; // 점을 이동시키지 않고 그냥 리턴
	}
	
	public String toString() {
		return "(" + getX() + "," + getY() + ")의 점";
	}
	
	public static void main(String[] args) {
		PositivePoint p = new PositivePoint();
		p.move(10, 10);
		System.out.println(p.toString() + "입니다.");
		
		p.move(-5, 5); // 객체 p는 음수 공간으로 이동되지 않음
		System.out.println(p.toString() + "입니다.");

		PositivePoint p2 = new PositivePoint(-10, -10);
		System.out.println(p2.toString() + "입니다.");
	}

}

9번

interface Stack {
    int length();

    int capacity();

    String pop();

    boolean push(String val);
}
public class StringStack implements Stack {
    private String[] element;
    private int tos;

    public StringStack(int capacity) {
        element = new String[capacity];
        tos = -1;
    }


    @Override
    public int length() {
        return tos + 1;
    }

    @Override
    public int capacity() {
        return element.length;
    }

    @Override
    public String pop() {
        if (tos == -1)
            return null;
        String s = element[tos];
        tos--;
        return s;
    }

    @Override
    public boolean push(String str) {
        if (tos == element.length - 1)
            return false;
        else {
            tos++;
            element[tos] = str;
            return true;
        }
    }
}
import java.util.*;

public class StackApp {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("총 스택 저장 공간의 크기 입력 >> ");
        int n = scanner.nextInt();

        StringStack ss = new StringStack();

        while (true) {
            System.out.print("문자열 입력 >> ");
            String str = scanner.next();
            if (str.equals("그만"))
                break;
            boolean res = ss.push(str);
            if (res == false) {
                System.out.println("스택이 꽉 차서 푸시 불가!");
            }
        }

        System.out.print("스택에 저장된 모든 문자열 팝 : ");
        int len = ss.length();
        for (int i = 0; i < len; i++) {
            System.out.print(ss.pop() + " ");
        }

        scanner.close();
    }
}

10번

abstract class PairMap {
	protected String keyArray []; // key들을 저장하는 배열
	protected String valueArray []; // value 들을 저장하는배열
	abstract String get(String key); // key 값으로 value를 검색
	abstract void put(String key, String value); // key와 value를 쌍으로 저장
	abstract String delete(String key); // key 값을 가진 아이템(value와 함께)을 삭제. 삭제된 value 값 리턴
	abstract int length(); // 현재 저장된 아이템의 개수 리턴
}

class Dictionary extends PairMap {
	protected int count = 0; // 현재 저장된 아이템의 개수
	
	public Dictionary(int capacity) { // 생성자
		keyArray = new String [capacity];
		valueArray = new String [capacity];
	}
	
	@Override
	String get(String key) {
		for(int i=0; i<count; i++) { // 현재 배열에 저장된 원소 개수만큼 반복
			if(keyArray[i].equals(key))
				return valueArray[i];
		}
		return null; // key를 발견할 수 없다면 null리턴
	}

	@Override
	void put(String key, String value) {
		int i=0;
		for(i=0; i<count; i++) { // 현재 배열에 저장된 원소 개수만큼 반복
			if(keyArray[i].equals(key))	break;
		}

		if(i == count) { // key를 발견하지 못한 경우
			if(i < keyArray.length) { // 배열이 꽉차지 않은 경우에만 저장, count 값 증가
				keyArray[i] = key;
				valueArray[i] = value;
				count++;
			}		
		}
		else { // key를 발견하고 value가 수정되는 경우, count는 증가시키지 않는다.
			keyArray[i] = key;
			valueArray[i] = value;			
		}
	}

	@Override
	String delete(String key) {
		int i=0;
		for(i=0; i<count; i++) { // 현재 배열에 저장된 원소 개수만큼 반복
			if(keyArray[i].equals(key))
				break;
		}

		if(i==count) // 발견 안됨
			return null;
		
		String value = valueArray[i];
		
		// 앞으로 한 자리씩 이동
		int last = count-1;
		for(int j=i; j<last; j++) {
			keyArray[j] = keyArray[j+1];
			valueArray[j] = valueArray[j+1];
		}
		
		count--;
		return value;
	}

	
	@Override
	int length() { return count; }

}

public class DictionaryApp {
	public static void main(String[] args) {
		Dictionary dic = new Dictionary(10);
		dic.put("황기태", "자바");
		dic.put("이재문", "파이선");
		dic.put("이재문", "C++"); // 이재문의 값을 C++로 수정		
		System.out.println("이재문의 값은 " + dic.get("이재문"));
		System.out.println("황기태의 값은 " + dic.get("황기태"));
		dic.delete("황기태");		
		System.out.println("황기태의 값은 " + dic.get("황기태"));		
	}
}

11번

public abstract class Calc { // 추상 클래스
	protected int a, b;
	public void setValue(int a, int b) {
		this.a = a;
		this.b = b;
	}
	public abstract int calculate(); // 추상 메소드. 서브 클래스에서 적절히 구현
}
import java.util.Scanner;

class Add extends Calc {
	public int calculate() { return a+b; }
}

class Mul extends Calc {
	public int calculate() { return a*b; }
}

class Sub extends Calc {
	public int calculate() { return a-b; }
}

class Div extends Calc {
	public int calculate() { return a/b; }
}

public class Calculator {
	public static void main (String args[])  {
		Scanner scanner = new Scanner(System.in);
		System.out.print("두 정수와 연산자를 입력하시오>>");
		int a = scanner.nextInt();
		int b = scanner.nextInt();
		char operator = scanner.next().charAt(0); // 연산자를 문자로 변환
		Calc exp;
		switch (operator) {
			case '+': exp = new Add(); break;
			case '-': exp = new Sub(); break; 
			case '*': exp = new Mul(); break;
			case '/': exp = new Div(); break;
			default:
				System.out.println("잘못된 연산자입니다.");
				scanner.close();
				return;
		}
		exp.setValue(a, b); // 피연산자 a와 b 값을 객체에 저장
		if(exp instanceof Div && b == 0) //  0으로 나누는 경우
			 System.out.println("계산할 수 없습니다.");
		else 
			System.out.println(exp.calculate());
		scanner.close();
	}
}

12번

public abstract class Shape {
	private Shape next;
	public Shape() { next = null;}
	public void setNext(Shape obj) {next = obj;} // 링크 연결
	public Shape getNext() {return next;}
	public abstract void draw();
}

public class Line extends Shape {
	
	@Override
	public void draw() {
		 System.out.println("Line");
	}
}
public class Rect extends Shape {

	@Override
	public void draw() {
		 System.out.println("Rect");
	}

}
public class Circle extends Shape {
	
	@Override
	public void draw() {
		 System.out.println("Circle");
	}

}
import java.util.Scanner;

public class GraphicEditor {
	private String name;
	private Scanner scanner = new Scanner(System.in);
	private Shape start=null, end=null;
	
	public GraphicEditor(String name) {
		this.name = name;
	}
	
	public void run() {
		System.out.println("그래픽 에디터 " + name + "을 실행합니다.");
		int choice = 0;
		while (choice != 4) { 
			int type, index;
			System.out.print("삽입(1), 삭제(2), 모두 보기(3), 종료(4)>>");
			choice = scanner.nextInt();
			switch (choice) {
				case 1:	// 삽입
					System.out.print("Line(1), Rect(2), Circle(3)>>");
					type = scanner.nextInt();
					if (type < 1 || type > 3) {
						System.out.println("잘못 선택하셨습니다.");
						break;
					}
					insert(type);
					break;
				case 2:	// 삭제
					System.out.print("삭제할 도형의 위치>>");
					index = scanner.nextInt();
					if (!delete(index)) {
						System.out.println("삭제할 수 없습니다.");
					}
					break;
				case 3:	// 모두 보기
					Shape p = start;
					while(p != null) {
						p.draw();
						p = p.getNext();
					}
					break;
				case 4:	// 끝내기
					break;
				default:
					System.out.println("잘못 입력하셨습니다.");
			}
		}
		System.out.println(name + "을 종료합니다.");
	
	}

	private boolean delete(int index) {
		Shape current = start, previous = start;
		if (start == null) // 리스트가 빈 경우
			return false;
		for (int i=0; i<index; i++) {
			previous = current;
			current = current.getNext(); // 다음 원소로 이동
			if (current == null) // 인덱스가 리스트 원소 갯수보다 큰 경우
				return false;
		}
		if (start == end) { // 리스트에 원소가 한개밖에 없는 경우
			start = end = null;
			return true;
		}
		if (current == start) {// 첫번째 원소를 삭제하는 경우
			start = start.getNext(); // 다음 원소가 첫번째 원소가 됨
		}
		else if (current == end) {// 마지막 원소를 삭제하는 경우
			end = previous; // 이전 원소가 마지막 원소가 됨
			end.setNext(null);
		} else {
			previous.setNext(current.getNext()); // 현재 원소를 리스트에서 삭제
		}
		return true;
	}

	private void insert(int choice) {
		Shape obj=null;
		switch (choice) {
			case 1: // Line
				 obj = new Line();
				 break;
			case 2: // Rect
				obj = new Rect();
				break;
			case 3: // Circle
				obj = new Circle();
		}
		if (start == null) { // 리스트가 비었을 때
			start = end = obj;
		} else {
			end.setNext(obj); // 마지막 원소 뒤에 삽입
			end = obj;
		}
	}
	
	public static void main(String [] args) {
		GraphicEditor ge = new GraphicEditor("beauty");
		ge.run();
	}
}
728x90
그리드형

댓글