Power Java 12장 프로그래밍
7.
도형에 관한 클래스를 다형성을 이용하여서 작성하여 보자.
Shape클래스는 전체 도형의 수퍼클래스이다.
Shape에서 상속된 TwoDimShape은 2차원 도형을 나태내며
면적을 계산하기 위하여 getArea()라는 메소드를 가진다.
Shape애서 상속된 ThreeDimShape은 3차원 도형을 나타내며
체적을 계산하기 위하여 getVolume()을 가진다.
2차원 도형에는 타원, 사각형, 삼각형이 있으며 3차원 도형에는 구, 직육면체, 원기둥이 있다.
다양한 도형을 생성하며 Shape배열에 저장하는 프로그램을 작성하라.
각 도형은 자신의 정보를 텍스트로 출력한다.
프로그램의 반복루프에서 각 도형이 2차원 도형이면 면적을 출력하고 3차원 도형이면 채적을 출력한다.
import java.util.*;
abstract class Shape
{
public abstract void Shape();
public abstract String getInfo();
}
class TwoDimShape extends Shape
{
double x=0, y=0, area=0;
String name = "";
public void Shape()
{
System.out.println("test");
}
public TwoDimShape(double input_x)
{
name = "Circle";
x = input_x;
area = x*x*3.14;
}
public TwoDimShape(double input_x, double input_y)
{
name = "Rectangle";
x = input_x;
y = input_y;
area = x*y;
}
public TwoDimShape(double input_x, double input_y, int a)
{
name = "Triangle";
x = input_x;
y = input_y;
area = (x*y)/2;
}
public double getArea()
{
return area;
}
public String getInfo()
{
return "이 도형은 " + name + "이고, 가로는 " + x + ", 세로는 " + y + "이며, 넓이는 " + area + "이다.";
}
}
class ThreeDimShap extends Shape
{
double x=0, y=0, z=0, Volum=0;
String name="";
public void Shape()
{
System.out.println("test");
}
public ThreeDimShap(double input_x)
{
name = "Sphere";
x = input_x;
Volum = (4*3.14*x*x*x)/3;
}
public ThreeDimShap(double input_x, double input_y, double input_z)
{
name = "Rectangular parallelepiped";
x = input_x;
y = input_y;
z = input_z;
Volum = x*y*z;
}
public ThreeDimShap(double input_x, double input_z)
{
name = "Circual corn";
x = input_x;
z = input_z;
Volum = (3.14*x*x*z)/3;
}
public double getVolum()
{
return Volum;
}
public String getInfo()
{
return "이 도형은 " + name + "이고, 가로는 " + x + ", 세로는 " + y + "높이는 " + z + "이며, 부피는 " + Volum + "이다.";
}
}
public class test
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
Shape[] shape = new Shape[6];
int num=0;
for(int i=0; i<6; i++)
{
System.out.println("원하는 도형을 고르세요.");
System.out.println("1. 원\n2. 삼각형\n3. 사각형\n4. 구\n5. 직육면체\n6. 원뿔");
num = scan.nextInt();
switch(num)
{
case 1 :
{
double x=0;
System.out.println("원의 반지름을 입력하세요.");
x = scan.nextInt();
TwoDimShape circle = new TwoDimShape(x);
shape[i] = circle;
}break;
case 2 :
{
double x=0, y=0;
System.out.println("삼각형의 가로와 세로를 입력하세요.");
x = scan.nextInt();
y = scan.nextInt();
TwoDimShape triangle = new TwoDimShape(x, y, 3);
shape[i] = triangle;
}break;
case 3 :
{
double x=0, y=0;
System.out.println("사각형의 가로와 세로를 입력하세요.");
x = scan.nextInt();
y = scan.nextInt();
TwoDimShape rectangle = new TwoDimShape(x, y);
shape[i] = rectangle;
}break;
case 4 :
{
double x=0, y=0;
System.out.println("구의 반지름을 입력하세요.");
x = scan.nextInt();1
ThreeDimShap Sphere = new ThreeDimShap(x);
shape[i] = Sphere;
}break;
case 5 :
{
double x=0, y=0, z=0;
System.out.println("직육면체의 가로와 세로, 높이를 입력하세요.");
x = scan.nextInt();
y = scan.nextInt();
z = scan.nextInt();
ThreeDimShap parallelepiped = new ThreeDimShap(x, y, z);
shape[i] = parallelepiped;
}break;
case 6 :
{
double x=0, z=0;
System.out.println("원뿔의 가로와 높이를 입력하세요.");
x = scan.nextInt();
z = scan.nextInt();
ThreeDimShap parallelepiped = new ThreeDimShap(x, z);
shape[i] = parallelepiped;
}break;
}
}
for(int i=0; i<6; i++)
{
System.out.println(shape[i].getInfo());
}
}
}
10.
책을 대여해주는 업체를 위한 Book이라는 클래스를 작성한다,
Book은 관리번호(number), 제목(title), 저자(author)를 필드로 가진다.
Book클래스는 각 필드에 대한 접근자와 설정자를 가진다.
Object 클래스의 equals() 메소드를 재정의하여서 만약 관리번호가 동일하면
동일한 책으로 간주한다.
다음으로 Book으로부터 상속을 받는 Novel, Post, ScienceFiction 클래스를 작성한다.
이들 클래스들은 연체된 날짜에 따라서 연체료를 계산하는 getLateFees()메소드를 재정의한다.
getLateFees()메소드는 연체 일수를 매개 변수로 받는다.
Novel의 경우에는 300원/일이고 Post는 200원/일, ScienceFiction는 600/일이다.
main()메소드에서 작성된 클래스들을 테스트하라.
import java.util.*;
abstract class Book {
int number = 0;
String name = "", title = "";
public int getNumber() {
return number;
}
public void setNumber(int set_number) {
number = set_number;
}
public String getTitle() {
return title;
}
public void setTitle(int set_title) {
number = set_title;
}
public String getName() {
return name;
}
public void setName(int set_name) {
number = set_name;
}
public abstract void book();
public abstract int getLateFees(int late);
boolean equals(int book_number) {
if (number == book_number)
return true;
else
return false;
}
}
class Novel extends Book {
public void book() {
}
public int getLateFees(int late) {
return late * 300;
}
}
class Post extends Book {
public void book() {
}
public int getLateFees(int late) {
return late * 200;
}
}
class ScienceFiction extends Book {
public void book() {
}
public int getLateFees(int late) {
return late * 600;
}
}
public class book {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Book[] book = new Book[5];
while (true) {
System.out.println("1. 등록\n2. 조회");
switch (scan.nextInt()) {
case 1: {
for (int i = 0; i < 5; i++) {
System.out.println("등록하실 소설을 고르세요.");
System.out.println("1. 소설\n2. 우편\n3. SF");
switch (scan.nextInt()) {
case 1: {
Novel novel = new Novel();
System.out.println("제목을 입력하세요 : ");
novel.title = scan.next();
System.out.println("저자를 입력하세요 : ");
novel.name = scan.next();
System.out.println("책번호를 입력하세요 : ");
novel.number = scan.nextInt();
for (int j = 0; j < 5; j++)
if (book[j].number == novel.number) {
System.out.println("중복된 책이 있습니다.");
break;
}
}
break;
case 2: {
Post post = new Post();
System.out.println("제목을 입력하세요 : ");
post.title = scan.next();
System.out.println("저자를 입력하세요 : ");
post.name = scan.next();
System.out.println("책번호를 입력하세요 : ");
post.number = scan.nextInt();
for (int j = 0; j < 5; j++)
if (book[j].number == post.number) {
System.out.println("중복된 책이 있습니다.");
break;
}
}
break;
case 3: {
ScienceFiction sf = new ScienceFiction();
System.out.println("제목을 입력하세요 : ");
sf.title = scan.next();
System.out.println("저자를 입력하세요 : ");
sf.name = scan.next();
System.out.println("책번호를 입력하세요 : ");
sf.number = scan.nextInt();
for (int j = 0; j < 5; j++)
if (book[j].number == sf.number) {
System.out.println("중복된 책이 있습니다.");
break;
}
}
break;
}
}
}
case 2: {
for (int i = 0; i < 5; i++) {
System.out.println(book[i].title);
System.out.println(book[i].name);
System.out.println(book[i].number);
}
}
break;
}
}
}
}