-
쉽게 배우는 자바 프로그래밍 2판 8장 도전문제JAVA/연습문제 2022. 10. 22. 04:16반응형
# 개발 공부하는 초보자가 작성한 답안이니 정답이 아닐 수 있습니다!!!
※ 자동차를 모델링해서 Car 클래스를 작성하고, 동일한 모델의 Car 객체 2개에 대하여 동일 여부를 테스트한다. 또 날짜, 자동차, 운전자 정보 등을 포함하는 문자열을 포맷에 맞추거나 토큰을 뽑는 코드를 작성해 보자. 이것으로 Object 클래스가 제공하는 메서드의 오버라이딩 필요성을 알아보고, Format 클래스와 StringTokenizer 클래스를 학습하자.
📢주어진 값📢 private String model public Car() { // 모델을 초기화하는 코드 } public String toString()
1. 그림과 같은 멤버와 생성자를 가진 Car 클래스를 작성한 후 2개의 동일 모델인 Car 객체를 생성해 동일한지 테스트해 보자. 단, 아직 equals() 메서드는 오버라이딩하지 않는다.
1-1. Car 클래스를 생성한다.
🧤정답🧤 public class Car { private String model; public Car (String model){ this.model = model; } public String toString() { return model; } }
1-2. Car 객체를 2개 생성한 후 Object 클래스에서 상속받은 equals() 메서드를 사용해 두 객체를 비교하는 테스트 프로그램을 다음과 같이 작성한다.
📢주어진 값📢 public class CarTest { public static void main(String[] args) { Car myCar = new Car("그랜저"); Car yourCar = new Car("그랜저"); // Car 객체 2개를 비교하는 코드 } }
🧤정답🧤 public class CarTest { public static void main(String[] args) { Car myCar = new Car("그랜저"); Car yourCar = new Car("그랜저"); myCar.equals(yourCar); } }
1-3. 테스트 프로그램을 실행한 후 다음 결과와 비교하고, 왜 이런 결과가 나타나는지 알아본다.
📢주어진 출력값📢 내 자동차는 [그랜저], 너 자동차는 [그랜저]로 모델이 다르다.
🧤정답🧤 public class Car { private String model; public Car (String model){ this.model = model; } public String toString() { return model; } } public class CarTest { public static void main(String[] args) { Car myCar = new Car("그랜저"); Car yourCar = new Car("그랜저"); if (myCar.equals(yourCar)) System.out.printf("내 자동차는 [%s], 너 자동차는 [%s]로 모델이 같다.", myCar.toString(), yourCar.toString()); else System.out.printf("내 자동차는 [%s], 너 자동차는 [%s]로 모델이 다르다.", myCar.toString(), yourCar.toString()); } }
2. 자동차 모델에 따라 동일한지 여부를 출력하도록 Car 클래스를 수정해 보자. 그리고 01의 테스트 프로그램에서 MessageFormat 클래스로 오늘 날짜, 자동차 모델, 운전자를 출력하는 코드를 추가해 보자.
2-1. 같은 모델이면 동일한 자동차로 출력할 수 있도록 Car 클래스에 equals() 메서드를 오버라이딩한다.
🧤정답🧤 public class Car { private final String model; public Car (String model){ this.model = model; } public String toString() { return model; } @Override public boolean equals(Object obj) { // 가장 먼저 ==연산자를 이용해 equals 인자가 자기 자신인지 검사해라 if (this == obj) return true; // instanceof 연산자를 사용하여 인자의 자료형이 정확한지 검사 if (!(obj instanceof Car)) return false; // equals의 인자를 정확한 자료형으로 변환 Car confignation = (Car) obj; // 필드 값이 인자로 주어진 객체의 해당 필드와 일치하는지 확인 return model.equals(confignation.model); } }
2-2. SimpleDateFormat과 MessageFormat을 이용해 다음과 같은 실행 결과가 나타나도록 테스트 프로그램을 작성한다.
📢주어진 출력값📢 자동차 모델이 둘 다 [그랜저]로 동일하다. 날짜: 06-07-2017, 자동차 모델=[그렌저], 운전자(홍길동)
🧤정답🧤 public class CarTest { public static void main(String[] args) { Car myCar = new Car("그랜저"); Car yourCar = new Car("그랜저"); StringTokenizer st = new StringTokenizer(yourCar.toString()); Calendar cal = Calendar.getInstance(); Date specificTime = cal.getTime(); String equalsGab = ""; if (myCar.equals(yourCar)) {equalsGab = "동일하다";} SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy"); String dateGab = sdf.format(specificTime); String msf = MessageFormat.format("자동차 모델이 둘 다 [{1}]로 {0}.", equalsGab, st.nextToken()); String msf2 = MessageFormat.format("날짜: {1}, 자동차 모델={0}, 운전자(홍길동)", myCar.toString(), dateGab); System.out.println(msf); System.out.println(msf2); } }
3. 2번의 실행 결과에서 두 번째 문자열을 다음과 같이 토큰으로 분할해서 출력하도록 코드를 수정해 보자.
📢주어진 출력값📢 날짜: 06-07-2017 자동차 모델 그렌저 운전자 홍길동
3-1. 필요한 구분자를 사용해 StringTokenizer 객체를 사용한다.
🧤정답🧤 StringTokenizer st2 = new StringTokenizer(msf2, " ,=()");
3-2. 2번의 두 번째 문자열에서 토큰을 추출해 출력할 수 있도록 while 문과 StringTokenizer 클래스의 메서드를 호출하는 실행문을 추가한다. 그리고 실행 결과를 비교한다.
🧤정답🧤 public class Car { private final String model; public Car (String model){ this.model = model; } public String toString() { return model; } @Override public boolean equals(Object obj) { // 가장 먼저 ==연산자를 이용해 equals 인자가 자기 자신인지 검사해라 if (this == obj) return true; // instanceof 연산자를 사용하여 인자의 자료형이 정확한지 검사 if (!(obj instanceof Car)) return false; // equals의 인자를 정확한 자료형으로 변환 Car confignation = (Car) obj; // 필드 값이 인자로 주어진 객체의 해당 필드와 일치하는지 확인 return model.equals(confignation.model); } } public class CarTest { public static void main(String[] args) { Car myCar = new Car("그랜저"); Car yourCar = new Car("그랜저"); Calendar cal = Calendar.getInstance(); Date specificTime = cal.getTime(); SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy"); String dateGab = sdf.format(specificTime); String msf2 = MessageFormat.format("날짜: {1}, 자동차 모델={0}, 운전자(홍길동)", myCar.toString(), dateGab); StringTokenizer st2 = new StringTokenizer(msf2, " ,=()"); while (st2.hasMoreTokens()) { System.out.println(st2.nextToken()); } } }
반응형'JAVA > 연습문제' 카테고리의 다른 글
쉽게 배우는 자바 프로그래밍 2판 8장 연습문제 Part.2 (6번 ~ 10번) (0) 2022.10.25 쉽게 배우는 자바 프로그래밍 2판 8장 연습문제 Part.1 (1번 ~ 5번) (0) 2022.10.25 쉽게 배우는 자바 프로그래밍 2판 7장 프로그래밍 문제 Part.2 (6번 ~ 9번) (0) 2022.10.21 쉽게 배우는 자바 프로그래밍 2판 7장 프로그래밍 문제 Part.1 (1번 ~ 5번) (0) 2022.10.20 쉽게 배우는 자바 프로그래밍 2판 7장 연습문제 Part.2 (6번 ~ 11번) (0) 2022.10.20