1. 원을 표현하는 다음 Circle 클래스가 있다.
class Circle {
private int radius;
public Circle(int radius){this.radius = radius;}
public int getRadius(){return radius;}
}
Circle 클래스를 상속받은 NamedCircle 클래스를 작성하여, 다음 main()을 시행할 때 다음 실행 결과와 같이 출력되도록 하라.
public static void main(String[] args){
NamedCircle w = new NamedCircle(5,"waffle");
w.show();
}
코드
package chapter5;
class Circle {
private int radius;
public Circle(int radius){this.radius = radius;}
public int getRadius(){return radius;}
}
public class NamedCircle extends Circle{
private String name;
NamedCircle(int radius, String name) {
super(radius);
this.name = name;
}
public void show() {
System.out.println(name + ", 반지름 = " + getRadius());
}
public static void main(String[] args){
NamedCircle w = new NamedCircle(5,"waffle");
w.show();
}
}
실행결과
2. 인터페이스 AdderInterface의 코드는 다음과 같다.
interface AdderInterface{
int add(int x, int y);
int add(int n);
}
AdderInterface를 상속받은 클래스 MyAdder를 작성하여, 다음 main()을 실행할 때 아래 실행결과와 같이 출력되도록 하라.
public static void main(String[] args){
MyAdder adder = new MyAdder();
System.out.println(adder.add(5,10));
System.out.println(adder.add(10));
}
코드
package chapter5;
interface AdderInterface{
int add(int x, int y);
int add(int n);
}
public class MyAdder implements AdderInterface{
@Override
public int add(int x,int y){
return x+y;
}
public int add(int n) {
// TODO Auto-generated method stub
int sum = 0;
for(int i=0; i <=n;i++)
sum +=i;
return sum;
}
public static void main(String[] args){
MyAdder adder = new MyAdder();
System.out.println(adder.add(5,10));
System.out.println(adder.add(10));
}
}
실행결과
3. 다음 코드와 실행결과를 참고하여 추상 클래스 Calculator를 상속받은 Adder와 Subtracter 클래스를 작성하라.
import java.util.Scanner;
abstract class Calculator{
protected int a,b;
abstract protected int calc();
protected void input(){
Scanner scanner = new Scanner(System.in);
System.out.print("두개의 정수를 입력하세요>>");
a = scanner.nextInt();
b = scanner.nextInt();
}
public void run(){
input();
int res = calc();
System.out.println("계산된 값은 " + res );
}
}
public class App {
public static void main(String[] args){
Adder adder = new Adder();
Subtracter sub = new Subtracter();
adder.run();
sub.run();
}
}
코드
package chapter5;
import java.util.Scanner;
abstract class Calculator {
protected int a, b;
protected void input() {
Scanner scanner = new Scanner(System.in);
System.out.print("정수 2개를 입력하세요>>");
a = scanner.nextInt();
b = scanner.nextInt();
}
public void run() {
input();
int res = calc();
System.out.println("계산된 값은 " + res);
}
abstract protected int calc(); // 추상 메소드
}
class Adder extends Calculator {
public int calc() {
return a + b;
}
}
class Subtracter extends Calculator {
public int calc() {
return a - b;
}
}
public class App {
public static void main(String[] args) {
Adder adder = new Adder();
Subtracter sub = new Subtracter();
adder.run();
sub.run();
}
}
실행결과
4. 2차원 상의 한 점을 표현하는 Point 클래스는 다음과 같다.
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;}
}
다음 main()을 실행하여 결과가 그림과 같도록 Point를 상속받는 ColorPoint 클래스(main() 포함)를 작성하라.
코드
package chapter5;
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 ColorPoint extends Point {
private String color;
ColorPoint(int x, int y, String color) {
super(x, y);
this.color =color;
}
void setPoint(int x, int y) {
move(x, y);
}
void setColor(String color) { this.color = color; }
void show() {
System.out.println(color + "색으로" + "(" + getX() + "," + getY() + ")");
}
public static void main(String[] args) {
ColorPoint cp = new ColorPoint(5, 5,"YELLOW");
cp.setPoint(10, 20);
cp.setColor("GREEN");
cp.show();
}
}
실행결과
5. 다음 StackInterface는 문자열을 푸시하고 팝 할 수 있는 스택에 대한 스펙을 정의하고 있다. StackInterface를 상속받는 StringStack 클래스를 구현하라. 그리고 StackManager 클래스에 main() 메소드를 작성하여 StringStack 객체를 생성하고, 사용자로부터 문자열 5개를 읽어 스택 객체를 저장하고, 다시 팝하여 읽은 반대순으로 출력하여라.
interface StackInterface {
int length();
String pop();
boolean push(String ob);
}
코드
package chapter5;
import java.util.Scanner;
// StackInterface 인터페이스 정의
interface StackInterface {
int length();
String pop();
boolean push(String ob);
}
// StackInterface를 상속받는 StringStack 클래스 정의
class StringStack implements StackInterface {
String stack[];
private int top = 0;
public StringStack() {
stack = new String[5];
}
@Override
public int length() {
return top + 1;
}
@Override
public String pop() {
return stack[--top];
}
@Override
public boolean push(String ob) {
if (top == 5) return false;
else stack[top++] = ob;
return true;
}
}
class StackManager {
public static void main(String[] args) {
StringStack stack = new StringStack();
Scanner sc = new Scanner(System.in);
for (int loop = 0; loop < 5; loop++) {
System.out.print("Input " + (loop+1) + " : ");
String inputStr = sc.next();
stack.push(inputStr);
}
for (int loop = 0; loop < 5; loop++) {
System.out.println(stack.pop());
}
}
}
실행결과
6. 간단한 그래픽 편집기를 만들어보자. 본문 5.6절 메소드 오버라이딩과 5.7절의 추상 클래스의 설명 중에 Line, Rect, Circle 클래스 코드를 활용하여, 다음 실행결과처럼 동작하는 프로그램을 작성하라.
코드
package chapter5;
import java.util.Scanner;
abstract class DObject {
abstract public void draw();
}
class Figure extends DObject {
String type;
public Figure() {
type = "";
}
public void draw() {
switch (type) {
case "Line":
System.out.println("Line");
break;
case "Rect":
System.out.println("Rect");
break;
case "Circle":
System.out.println("Circle");
break;
}
}
}
public class GraphicEditor {
public static void main(String[] args) {
int i = 0;
Menu M = new Menu();
while (true) {
Scanner scanner = new Scanner(System.in);
System.out.print("삽입(1), 삭제(2), 모두보기(3), 종료(4) >>");
int select = scanner.nextInt();
switch (select) {
case 1:
M.Insert(i);
i++;
break;
case 2:
M.Delete();
break;
case 3:
M.View();
break;
case 4:
M.Exit();
break;
default:
System.out.println("잘못 입력하셨습니다");
}
}
}
}
// 메뉴 클래스
class Menu {
Scanner rd = new Scanner(System.in);
Figure f[] = new Figure[10];
public Menu() {
for (int i = 0; i < f.length; i++)
f[i] = new Figure();
}
void Insert(int i) {
System.out.print("도형 종류 Line(1), Rect(2), Circle(3) >>");
int num = rd.nextInt();
switch (num) {
case 1:
f[i].type = "Line";
break;
case 2:
f[i].type = "Rect";
break;
case 3:
f[i].type = "Circle";
break;
default:
System.out.println("잘못 입력하셨습니다.");
}
}
void Delete() {
System.out.print("삭제할 도형의 위치 >>");
int num = rd.nextInt();
if (f[num - 1].type.equals(""))
System.out.println("삭제할 수 없습니다");
f[num - 1].type = "";
}
void View() {
for (int i = 0; i < f.length; i++) {
if (f[i].equals("")) {
} else
f[i].draw();
}
}
void Exit() {
System.exit(0);
}
}
실행결과
'자바 > 명품 자바 에센셜' 카테고리의 다른 글
명품 자바 에센셜 실습문제 7장 (1) | 2016.01.22 |
---|---|
명품 자바 에센셜 실습문제 6장 (2) | 2016.01.21 |
명품 자바에센셜 실습문제 4장 (0) | 2016.01.18 |
명품 자바에센셜 실습문제 3장 (10) | 2016.01.18 |
명품 자바 에센셜 실습문제 2장 (1) | 2016.01.05 |