https://github.com/wooriFISA-team1/assignment01
assignment01
우리 FISA 팀1 제출 문제
목표
- 현실의 실제 사례를 예시로 객체지향에 대한 이해도를 높입니다.
- 클래스들간 상속 관계를 이해하고 업/다운캐스팅과 try-catch문을 활용합니다.
문제
- Mercedes Benz(이하 Benz) 라는 차 브랜드가 있습니다.
- Benz에는 AMG라는 브랜드가 있습니다.
- AMG의 모든 차량들은 "One man, One Engine" 이라는 모토에 따라 각각 한 명의 엔지니어가 할당됩니다.
- Car, Benz, AMG, Engineer 클래스들간의 상속관계를 활용하여 파일 주석에 적힌 문제를 풀어주세요.
public class Team01 {
public static void main(String[] args) throws IOException {
Engineer engineer1 = new Engineer("김엔진");
Engineer engineer2 = new Engineer("정엔진");
Benz benz = new Benz(200, "A-Class");
AMG amg = new AMG(300, "G-Class 63 AMG", engineer1);
//----------문제 1----------
//다음 두 줄을 한 줄로 줄여주세요
AMG temp = new AMG(522, "AMG_GT", engineer1);
Car car = temp;
//----------문제 2----------
//car의 엔지니어를 [정엔진]씨로 바꾸고, 엔지니어의 이름을 출력해주세요
//----------문제 3----------
//car를 컴파일에러 없이 benzList에 추가하고, 모델명을 출력해주세요
ArrayList<Benz> benzList = new ArrayList<>();
benzList.add(benz);
benzList.add(amg);
//benzList.add(car);
//---------------문제 4---------------
//논리적 예외 1 -> 예외가 발생하는 경우를 말해주세요
System.out.print("몇 번째 차를 조회할까요? : ");
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
boolean flag1 = true;
do {
try{
int n = Integer.parseInt(bf.readLine());
Benz myBenz = benzList.get(n);
System.out.println("모델명 : " + myBenz.model + "\n");
flag1 = false;
}catch(NumberFormatException e){
System.out.print("숫자를 입력하세요 : ");
}catch (IndexOutOfBoundsException e) {
System.out.print("해당 차가 존재하지 않습니다. 다시 입력하세요 : ");
}
}while(flag1);
//------------------------------------
//---------------문제 5---------------
//논리적 예외 2 -> 예외가 발생하는 경우를 말해주세요
boolean flag2 = true;
do {
try {
System.out.print("마력을 입력하세요 : ");
int inputHP = Integer.parseInt(bf.readLine());
Benz yourBenz = new Benz(inputHP, "님이 산 차");
System.out.println(yourBenz.model + "의 마력은 " + yourBenz.HP + " 입니다.");
flag2 = false;
}catch(NumberFormatException e){
System.out.print("숫자를 입력하세요 : ");
}catch(Exception e) {
System.out.print("님이 산 차의 " + e.getMessage() + "\n다시 입력하세요 : ");
}
}while(flag2);
//------------------------------------
}
}
class Engineer{
String name;
Engineer(String name){
this.name = name;
}
}
class Car {
int HP;
public Car(int HP) {
if(HP<=0) {
throw new RuntimeException("마력은 0이나 음수가 될 수 없습니다.");
}
this.HP = HP;
}
}
//상위 클래스에 매개변수가 있는 생성자 존재하기에 기본생성자 생성 불가
class Benz extends Car {
String model;
public Benz(int HP, String model) {
super(HP);
this.model = model;
}
}
//상위 클래스에 매개변수가 있는 생성자 존재하기에 기본생성자 생성 불가
class AMG extends Benz{
Engineer engineer;
public AMG(int HP, String model, Engineer engineer) {
super(HP, model);
this.engineer = engineer;
}
public String getEngineerName() {
return engineer.name;
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Team01 {
public static void main(String[] args) throws IOException {
Engineer engineer1 = new Engineer("김엔진");
Engineer engineer2 = new Engineer("정엔진");
Benz benz = new Benz(200, "A-Class");
AMG amg = new AMG(300, "G-Class 63 AMG", engineer1);
//---------------문제 1---------------
//다음을 한 줄로 줄여주세요
Car car = new AMG(522, "AMG_GT", engineer1);
//------------------------------------
//---------------문제 2---------------
//car의 엔지니어를 [정엔진]씨로 바꾸고, 엔지니어의 이름을 출력해주세요
((AMG)car).engineer = engineer2;
System.out.println("바꾼 엔지니어 이름 => " + ((AMG)car).engineer.name + "\n");
//------------------------------------
//---------------문제 3---------------
//car를 컴파일에러 없이 benzList에 추가하고, 모델명을 출력해주세요
ArrayList<Benz> benzList = new ArrayList<>();
benzList.add(benz);
benzList.add(amg);
benzList.add((Benz)car);
System.out.println("마지막으로 추가한 모델 => " + ((Benz)benzList.get(2)).model + "\n");
//------------------------------------
//---------------문제 4---------------
//논리적 예외 1 -> 예외가 발생하는 경우를 말해주세요
//정답 : ArrayList 인덱스 범위를 벗어난 경우, 숫자가 아닌 값을 입력한 경우
System.out.print("몇 번째 차를 조회할까요? : ");
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
boolean flag1 = true;
do {
try{
int n = Integer.parseInt(bf.readLine());
Benz myBenz = benzList.get(n);
System.out.println("모델명 : " + myBenz.model + "\n");
flag1 = false;
}catch(NumberFormatException e){
System.out.print("숫자를 입력하세요 : ");
}catch (IndexOutOfBoundsException e) {
System.out.print("해당 차가 존재하지 않습니다. 다시 입력하세요 : ");
}
}while(flag1);
//------------------------------------
//---------------문제 5---------------
//논리적 예외 2 -> 예외가 발생하는 경우를 말해주세요
//정답 : 음수를 입력한 경우, 숫자가 아닌 값을 입력한 경우
boolean flag2 = true;
do {
try {
System.out.print("마력을 입력하세요 : ");
int inputHP = Integer.parseInt(bf.readLine());
Benz yourBenz = new Benz(inputHP, "님이 산 차");
System.out.println(yourBenz.model + "의 마력은 " + yourBenz.HP + " 입니다.");
flag2 = false;
}catch(NumberFormatException e){
System.out.print("숫자를 입력하세요 : ");
}catch(Exception e) {
System.out.print("님이 산 차의 " + e.getMessage() + "\n다시 입력하세요 : ");
}
}while(flag2);
//------------------------------------
}
}
class Engineer{
String name;
Engineer(String name){
this.name = name;
}
}
class Car {
int HP;
public Car(int HP) {
if(HP<=0) {
throw new RuntimeException("마력은 0이나 음수가 될 수 없습니다.");
}
this.HP = HP;
}
}
//상위 클래스에 매개변수가 있는 생성자 존재하기에 기본생성자 생성 불가
class Benz extends Car {
String model;
public Benz(int HP, String model) {
super(HP);
this.model = model;
}
}
//상위 클래스에 매개변수가 있는 생성자 존재하기에 기본생성자 생성 불가
class AMG extends Benz{
Engineer engineer;
public AMG(int HP, String model, Engineer engineer) {
super(HP, model);
this.engineer = engineer;
}
public String getEngineerName() {
return engineer.name;
}
}