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
그리드형
'IT > 프로그래밍' 카테고리의 다른 글
명품 JAVA Programming 7장 실습문제 정답 (0) | 2020.12.12 |
---|---|
명품 JAVA Programming 6장 실습문제 정답 (0) | 2020.12.12 |
명품 JAVA Programming 4장 실습문제 정답 (0) | 2020.12.12 |
명품 JAVA Programming 3장 실습문제 정답 (0) | 2020.12.12 |
명품 JAVA Programming 2장 실습문제 정답 (0) | 2020.12.12 |
댓글