프로그래밍/java

[JAVA] 명품 자바 프로그래밍 5장 실습문제

승민아 2022. 5. 18. 22:00

1번 문제

import java.util.Scanner;

class TV{
	private int size;
	public TV(int size) { this.size = size; }
	protected int getSize() { return size; }
}

class ColorTV extends TV
{
	int color;
	
	public ColorTV(int size, int color)
	{
		super(size);
		this.color=color;
	}
	
	public void printProperty()
	{
		System.out.println(getSize()+"인치 "+color+"컬러");
	}
	
}

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

 

2번 문제

import java.util.Scanner;

class TV{
	private int size;
	public TV(int size) { this.size = size; }
	protected int getSize() { return size; }
}

class ColorTV extends TV
{
	int color;
	
	public ColorTV(int size, int color)
	{
		super(size);
		this.color=color;
	}
	
	public void printProperty()
	{
		System.out.println(getSize()+"인치 "+color+"컬러");
	}
	
}

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.print("나의 IPTV는 "+address+" 주소의 ");
		super.printProperty();
		
	}
}


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

 

3번 문제

추상클래스는 private로 선언 불가

추상클래스는 상속 받아 사용하게 만드는것인데 private가 말이 될까요!?!?

import java.util.Scanner;

abstract class Converter {
	protected double ratio;
	abstract protected double convert(double src);
	abstract protected String getSrcString();
	abstract protected String getDestString();
	
	public void run()
	{
		Scanner scanner = new Scanner(System.in);
		System.out.println(getSrcString()+"을 "+getDestString()+" 로 바꿉니다.");
		System.out.print(getSrcString()+"을 입력하세요>>");
		double val = scanner.nextDouble();
		double res = convert(val);
		System.out.println("변환 결과: "+ res + getDestString()+"입니다.");
		scanner.close();
	}
	
}


class Won2Dollar extends Converter{
	
	int won;
	
	Won2Dollar(double ratio)
	{
		this.ratio=ratio;
	}
	
	protected String getSrcString()
	{
		return "원";
	}
	
	protected String getDestString()
	{
		return "달러";
	}
	
	protected double convert(double src)
	{
		return src/ratio;
	}
	
}

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

 

4번 문제

import java.util.Scanner;

abstract class Converter {
	protected double ratio;
	abstract protected double convert(double src);
	abstract protected String getSrcString();
	abstract protected String getDestString();
	
	public void run()
	{
		Scanner scanner = new Scanner(System.in);
		System.out.println(getSrcString()+"을 "+getDestString()+" 로 바꿉니다.");
		System.out.print(getSrcString()+"을 입력하세요>>");
		double val = scanner.nextDouble();
		double res = convert(val);
		System.out.println("변환 결과: "+ res + getDestString()+"입니다.");
		scanner.close();
	}
	
}


class Won2Dollar extends Converter{
	
	int won;
	
	Won2Dollar(double ratio)
	{
		this.ratio=ratio;
	}
	
	protected String getSrcString()
	{
		return "원";
	}
	
	protected String getDestString()
	{
		return "달러";
	}
	
	protected double convert(double src)
	{
		return src/ratio;
	}
	
}

class Km2Mile extends Converter
{
	
	Km2Mile(double ratio)
	{
		this.ratio=ratio;
	}
	protected double convert(double src)
	{
		return src/ratio;
	}
	protected String getSrcString()
	{
		return "km";
	}
	protected String getDestString()
	{
		return "mile";
	}
}

public class Extest{
	
    public static void main(String[] args) {
    	Km2Mile toMile = new Km2Mile(1.6);
    	toMile.run();
    }
	
}

 

5번 문제

import java.util.Scanner;

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{
	
	String color;
	
	ColorPoint(int x, int y, String color)
	{
		super(x,y);
		this.color=color;
	}
	
	void setXY(int x, int y)
	{
		move(x,y);
	}
	
	void setColor(String color)
	{
		this.color=color;
	}
	
	public String toString()
	{
		return color+"색의 ("+getX()+","+getY()+")의 점";
	}
}

public class Extest{
	
    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번 문제

import java.util.Scanner;

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{
	
	String color;
	
	ColorPoint(int x, int y, String color)
	{
		super(x,y);
		this.color=color;
	}
	
	ColorPoint()
	{
		super(0,0);
		this.color="BLACK";
	}
	
	void setXY(int x, int y)
	{
		move(x,y);
	}
	
	void setColor(String color)
	{
		this.color=color;
	}
	
	public String toString()
	{
		return color+"색의 ("+getX()+","+getY()+")의 점";
	}
}

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

 

7번 문제

import java.util.Scanner;

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 Point3D extends Point
{
	
	int z;
	Point3D(int x, int y, int z)
	{
		super(x,y);
		this.z=z;
	}
	
	public String toString()
	{
		return "("+getX()+","+getY()+","+z+")"+"의 점입니다.";
	}
	
	public void move(int x, int y, int z)
	{
		super.move(x, y);
		this.z=z;
	}
	
	public void moveUp()
	{
		z+=1;
	}
	
	public void moveDown()
	{
		z-=1;
	}

}

public class Extest{
	
    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번 문제

import java.util.Scanner;

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 PositivePoint extends Point
{
	
	PositivePoint(int x, int y)
	{
		super(x,y);
		if(x<0||y<0)
			move(0,0);
	}
	
	PositivePoint()
	{
		super(0,0);
	}
	
	protected void move(int x,int y)
	{
		if(x<0||y<0)
			return;
		else
			super.move(x, y);
	}
	
	public String toString()
	{
		return "("+getX()+","+getY()+")"+"의 점";
	}
	
}

public class Extest{
	
    public static void main(String[] args) {
    
    	PositivePoint p = new PositivePoint();
    	p.move(10,10);
    	System.out.println(p.toString()+"입니다.");
    	
    	p.move(-5, 5);
    	System.out.println(p.toString()+"입니다.");
    	
    	PositivePoint p2 = new PositivePoint(-10,-10);
    	System.out.println(p2.toString()+"입니다.");
    	
    }
	
}

 

9번 문제

import java.util.Scanner;

interface Stack{
	
	int length();
	int capacity();
	String pop();
	boolean push(String val);
}

class StringStack implements Stack
{
	String str[];
	int len;
	int cap;
	
	StringStack(int size)
	{
		len=0;
		cap=size;
		str = new String[size];
	}
	
	public int length()
	{
		return len;
	}
	
	public int capacity()
	{
		return cap;
	}
	
	public String pop() {
		return str[--len];
	}
	public boolean push(String val)
	{
		if(len==cap)
			return false;
		
		str[len++] = val;
		return true;
	}
}

public class StackApp
{
	public static void main(String[] args) {
	    
    	System.out.print("총 스택 크기 입력>>");
    	Scanner scanner = new Scanner(System.in);
    	int size = scanner.nextInt();
    	StringStack stringstack = new StringStack(size);
    	while(true)
    	{
    		System.out.print("문자열 입력 >>");
    		String str = scanner.next();
    		if(str.equals("그만"))
    			break;
    		if(!stringstack.push(str))
    			System.out.println("스택이 꽉차서 불가능");		
    	}
    	System.out.print("스택에 저장된 모든 문자열 팝 :");
    	int cnt=stringstack.len;
    	for(int i=0;i<cnt;i++)
    		System.out.print(stringstack.pop()+" ");
    }
	
	
}

/*public class Extest{
    
}*/

 

10번 문제

import java.util.Scanner;

abstract class PairMap{
	protected String keyArray[];
	protected String valueArray[];
	abstract String get(String key);
	abstract void put(String key, String value);
	abstract String delete(String key);
	abstract int length();
}

class Dictionary extends PairMap
{
	protected String keyArray[];
	protected String valueArray[];
	int len;
	Dictionary(int size)
	{
		len=0;
		keyArray = new String[size];
		valueArray = new String[size];
	}
	String get(String key)
	{
		
		for(int i=0;i<len;i++)
		{
			if(keyArray[i].equals(key))
				return valueArray[i];
		}
		return null;
	}
	void put(String key, String value)
	{
		for(int i=0;i<len;i++)
		{
			if(keyArray[i].equals(key))
				valueArray[i]=value;
		}
		
		keyArray[len]=key;
		valueArray[len++]=value;
	}
	String delete(String key)
	{
		for(int i=0;i<len;i++)
		{
			if(keyArray[i].equals(key)) {
				String str = valueArray[i];
				valueArray[i]=null;
				return str;
			}
		}
		return null;
	}
	int length()
	{
		return len;
	}
}

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("황기태"));
	}
	
}

/*public class Extest{
    
}*/

 

11번 문제

import java.util.Scanner;

abstract class Calc{
	

	int a,b;
	int res;
	abstract void setValue(int a, int b);
	
	int calculate()
	{
		return res;
	}	
}

class Add extends Calc{
	
	void setValue(int a, int b)
	{
		res=a+b;
	}

}

class Sub extends Calc{
	void setValue(int a, int b)
	{
		res=a-b;
	}

}
class Mul extends Calc{
	
	void setValue(int a, int b)
	{
		res=a*b;
	}
	
}
class Div extends Calc{
	int a,b;
	int res;
	
	void setValue(int a, int b)
	{
		res=a/b;
	}

}

public class Test {
		public static void main(String[] args) {	
			Scanner scanner = new Scanner(System.in);
			System.out.print("두 정수와 연산자를 입력하시오>>");
			int a=scanner.nextInt();
			int b=scanner.nextInt();
			char c=scanner.next().charAt(0);
			if(c=='+') {
				Add add = new Add();
				add.setValue(a, b);
				System.out.println(add.calculate());
			}
			else if(c=='-') {
				Sub sub = new Sub();
				sub.setValue(a, b);
				System.out.println(sub.calculate());
			}
			else if(c=='*')
			{
				Mul mul = new Mul();
				mul.setValue(a, b);
				System.out.println(mul.calculate());
			}
			else if(c=='/')
			{

				Div div = new Div();
				div.setValue(a, b);
				System.out.println(div.calculate());
			}
	}
}

 

13번 문제

import java.util.Scanner;

interface Shape{
	
	final double PI=3.14;
	void draw();
	double getArea();
	default public void redraw()
	{
		System.out.print("--- 다시 그립니다. ");
		draw();
	}
	
}

class Circle implements Shape
{
	private int radius;
	
	public Circle(int radius)
	{
		this.radius=radius;
	}
	
	public double getArea()
	{
		return PI*radius*radius;
	}
	
	public void draw()
	{
		System.out.println("반지름이"+radius+"인 원입니다.");
	}
	
}

public class Extest{
    
	public static void main(String[] args) {
	Shape donut = new Circle(10);
	donut.redraw();
	System.out.println("면적은 "+donut.getArea());
	}
}

 

14번 문제

import java.util.Scanner;

interface Shape{
	
	final double PI=3.14;
	void draw();
	double getArea();
	default public void redraw()
	{
		System.out.print("--- 다시 그립니다. ");
		draw();
	}
	
}

class Circle implements Shape
{
	private int radius;
	
	public Circle(int radius)
	{
		this.radius=radius;
	}
	
	public double getArea()
	{
		return PI*radius*radius;
	}
	
	public void draw()
	{
		System.out.println("반지름이"+radius+"인 원입니다.");
	}
	
}

class Oval implements Shape{
	int x, y;
	public Oval(int x, int y)
	{
		this.x=x;
		this.y=y;
	}
	public double getArea()
	{
		return x*y*PI;
	}
	public void draw()
	{
		System.out.println(x+"x"+y+"에 내접하는 타원입니다.");
	}
}

class Rect implements Shape{
	int x,y;
	public Rect(int x, int y)
	{
		this.x=x;
		this.y=y;
	}
	public double getArea()
	{
		return x*y;
	}
	public void draw()
	{
		System.out.println(x+"x"+y+"크기의 사각형입니다.");
	}
	
}

public class Extest{
    
	public static void main(String[] args) {
		
		Shape[] list = new Shape[3];
		list[0] = new Circle(10);
		list[1] = new Oval(20,30);
		list[2] = new Rect(10, 40);
		
		for(int i=0;i<list.length;i++) list[i].redraw();
		for(int i=0;i<list.length;i++) System.out.println("면적은 "+list[i].getArea());
	}
}