명품 JAVA Programming 6장 연습문제 정답
명품 JAVA Programming 6장 연습문제 정답
1.
(1) import 문은 다른 패키지에 있는 클래스를 사용할 때 코드의 서두에 선언하는 것으로, 컴파일러에게 그 클래스의 경로명을 알려주는 문이다.
(2) import java.util.Random;은 Random 클래스가 java.util 패키지에 있음을 컴 파일러에게 알려주는 문이다. 자바 소스 프로그램에서 Random의 이름을 사용 하면, 컴파일러가 Random 클래스의 경로명을 찾을 때, import 문을 참조하여 찾게 한다. import java.util.*;는 자바 프로그램 내에서 사용하는 클래스들 의 경로명을 찾을 때, java.util 패키지에서도 확인할 것을 컴파일러에게 지 시하는 문이다. 만일 자바 소스 프로그램에서 Random 클래스를 사용하면, 컴 파일러는 Random 클래스가 어느 패키지에 있는지 찾기 위해 java.util 패키지 에서 확인해본다. import java.util.*;는 import java,util.Random; import java,util.Vector; 등과 같이 여러 import 문을 줄여 사용할 때 유용하다.
(3) import 문을 사용하지 않고도 자바 프로그램을 작성할 수 있다. 자바 프로그램 을 작성할 때, 모든 클래스의 이름에 완전 경로명을 사용하면 된다. 예를 들면 java.util.Random r = new java.util.Random(); 과 같이 완전 경로명으로 작 성하는 것이다. 하지만, 프로그램의 코드가 길어지고 복잡해져 가독성이 떨어 지는 단점이 있어 import 문을 사용하는 것이 효과적이다.
(4) java.lang 패키지에 속한 클래스들은 import 없이도 사용할 수 있다. java. lang 패키지에 속한 클래스들로는 Object, String, Math, System 등이 있다.
2. ④. 자바 JDK는 수많은 클래스들을 제공하는데, 서로 관련 있는 클래스들을 하나의 패키지로 구성하는 식으로 수 많은 패키지에 분산 저장하여 제공한다.
3. import 문을 사용하지 않도록 Example 클래스를 다시 작성하면 다음과 같다.
public class Example { public static void main(String[] args) { java.util.StringTokenizer st = new java.util.StringTokenizer("a=3,b=5,c=6", ","); while (st.hasMoreTokens()) System.out.println(st.nextToken()); } }
4. 여러 가지로 작성할 수 있는데, 첫 번째 다음과 같이 작성할 수 있다.
import java.util.StringTokenizer; public class Example { public static void main(String[] args) { int sum = 0; StringTokenizer st = new StringTokenizer("a=3,b=5,c=6", ",="); while (st.hasMoreTokens()) { String token = st.nextToken(); System.out.println(token); int n = 0; try { n = Integer.parseInt(token); } catch(NumberFormatException e) { // 정수가 아닌 경우 아무것도 하지 않고 그냥 넘어 간다. } sum += n; } System.out.println("합은 " + sum); } }
좀 다르게 작성하면 다음과 같다.
import java.util.StringTokenizer; public class Example { public static void main(String[] args) { int sum = 0; int n = 1; StringTokenizer st = new StringTokenizer("a=3,b=5,c=6", ",="); while (st.hasMoreTokens()) { String token = st.nextToken(); System.out.println(token); if(n%2 == 0) { // 짝수번째 토컨에 대해서만 정수로 변환하여 합하기 sum += Integer.parseInt(token); } n++; } System.out.println("합은 " + sum); } }
5. (1)
package device; public class TV { private int size; public TV(int size) { this.size = size; } }
(2)
package app; import device.TV; public class Home { public Home() { TV myTv = new TV(65); } }
package app;와 import device.TV;의 순서가 다르면 틀린 답이다. 반드시 package 선언이 먼저 와야 한다.
(3) TV 클래스를 컴파일한 TV.class 파일의 경로명은 device.TV.class이고, Home 클래스를 컴파일한 Home.class 파일의 경로명은 app.Home.class이다.
6. (1) String s1 = Integer.toString(20); (2) double d = Double.parseDouble("35.9"); (3) boolean b = Boolean.parseBoolean("true"); (4) String s2 = Integer.toBinaryString(30); (5) String c = Character.toString('c');
7. 다음 코드를 실행하면,
String a = "가나다라"; System.out.println(a == "가나다라"); String b = new String(a); System.out.println(a == b);
다음과 같이 출력된다.
true false
설명을 위해 다음 그림을 참고하라.
"가나다라"a
"가나다라"b
자바 가상 기계의 스트링 리터럴 테이블
힙 메모리
"가나다라" 문자열은 자바 가상 기계의 스트링 리터럴 테이블에 저장되고, String a의 레퍼런스 a는 리터럴 테이블을 가리키므로, "가나다라" 문자열의 레퍼런스와 레퍼런스 a의 값은 일치한다. 그러므로 a == "가나다라"의 비교 연산은 true이다. 하지만, new String(a)에 의해 생성되는 객체는 힙에 생성되므로 String b는 힙 영역을 가리킨다. 그러므로 a == b의 연산에서 a와 b의 레퍼런스 값은 서로 달라 연산 결과는 false가 된다.
8. 다음 코드 실행된 후 a, b, c 문자열은 무엇인지 알아보자.
String a = new String(" Oh, Happy "); String b = a.trim(); String c = b.concat(" Day.");
a.trim() 후에도 문자열 a는 변하지 않는다. 다만 trim()은 문자열 앞뒤의 공백문 자를 제거한 새로운 문자열을 리턴하므로 a와 b는 다음과 같이 된다. 문자열 a : " Oh, Happy " 문자열 b : "Oh, Happy"
그리고 b.concat() 후에도 문자열 b는 변하지 않고, 문자열을 연결한 새로운 문자 열을 리턴한다. 그러므로 문자열 c는 다음과 같다. 문자열 c : "Oh, Happy Day."
String 클래스의 메소드는 현재 문자열을 수정하지 않는다. 이것은 String 객체의 특징이다.
9. (1) b (2) c, e
10. (1) Double PI = 3.14; // 3.14를 Double(3.14)로 자동 박싱 (2) double pi = PI; // PI를 PI.doubleValue();로 자동 언박싱
(3) System.out.println(3 + Integer.valueOf(5)); // Integer.valueOf(5)는 Integer.valueOf(5).intValue()로 자동 언박싱 되어 // 실행 중에 5가 된다. (4) if('c' == Character.valueOf('c')) // Character.valueOf('c')가 Character.valueOf('c').charValue()로 자동 언박싱되어 실행 중에 'c'가 된다.
11. (1) Math 클래스를 활용하여 100~255까지의 랜덤 정수 발생
for(int i=0; i<10; i++) System.out.println((int)(Math.random()*156 + 100));
(2) Random 클래스를 난수를 발생시키도록 코드 전체를 재작성하면 다음과 같다.
import java.util.Random; public class Example { public static void main(String[] args) { Random r = new Random(); for(int i=0; i<10; i++) { System.out.print(r.nextInt(156) + 100); System.out.print(" "); } } }
12.
Calendar date = Calendar.getInstance(); // Calendar 객체 생성 date.clear(); // 현재 Calendar 객체에 저장된 정보를 모두 지운다. date.set(Calendar.YEAR, 2020); // Calendar 객체에 2020년의 년도 저장 date.set(Calendar.MONTH, 11); // Calendar 객체에 12월의 달 저장 date.set(Calendar.DAY_OF_MONTH, 25); // Calendar 객체에 25일의 날짜 저장 System.out.println("약속 날짜는 " + date.get(Calendar.YEAR) + "년 " + (date.get(Calendar.MONTH) + 1) + "월 " + date.get(Calendar.DAY_OF_MONTH)+ 일");
'IT > 프로그래밍' 카테고리의 다른 글
명품 JAVA Programming 8장 연습문제 정답 (0) | 2020.12.11 |
---|---|
명품 JAVA Programming 7장 연습문제 정답 (0) | 2020.12.11 |
명품 JAVA Programming 5장 연습문제 정답 (0) | 2020.12.11 |
명품 JAVA Programming 4장 연습문제 정답 (0) | 2020.12.11 |
명품 JAVA Programming 3장 연습문제 정답 (0) | 2020.12.11 |
댓글