JAVA/JAVA 문제풀이

명품 자바 프로그래밍 6장 연습문제

공부 기록장 2023. 8. 18. 20:29

1. import에 대한 다음 질문에 답하라.

(1) import 문은 언제 사용하며, import 문이 의미하는 바는 무엇인가?

답 : import 문은 다른 패키지에 있는 클래스를 사용하고자 할 때 사용하며 클래스의 경로명을 의미한다.

 

(2) import java.util.Random;과 import java.util.*;의 의미는 각각 무엇인가?

답 : import java.util.Random 은 java.util 패키지에서 Random 클래스를 사용한다는 의미이고

       import java.util.*은 java.util 패키지에서 모든 클래스를 사용한다는 의미이다.

 

(3) import 문을 사용하지 않고도 자바 프로그램을 작성할 수 있는가?

답 : 그렇다. import 문 없이 클래스의 경로명을 일일히 다 작성하면 프로그램을 작성할 수 있다.

 

(4) 어떤 패키지에 속한 클래스는 import문 없이도 사용할 수 있는가?

답 : java.lang에 속한 클래스(String, System, Object, Math 등이 있다)


2. 패키지에 대한 설명 중 잘못된 것은?

1. package 키워드를 이용하여 패키지를 선언한다.

2. 서로 관련된 클래스와 인터페이스들을 하나의 디렉터리에 묶어 놓은 것이다.

3. 패키지는 컴파일된 클래스 파일들을 저장하는 위치를 지정한다.

4. 자바 JDK는 클래스들을 모두 하나의 패키지에 담아 제공한다.

 

답 : 4번


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. 다음과 같이 출력되도록 코드를 수정하라.

package donghun;
import java.util.StringTokenizer;

public class PersonTest
{
	public static void main(String[] args) 
	{
		StringTokenizer st = new StringTokenizer("a=3,b=5,c=6",",=");
		int sum=0;
		while(st.hasMoreTokens())
		{
			String next = st.nextToken();
			try 
			{
			    sum+= Integer.parseInt(next);
			    System.out.println(next);
			}
			catch(NumberFormatException e) 
			{
				System.out.println(next);
				
			}
		}

		System.out.println("합은 "+sum);
	}
}

5. 다음 물음에 답하라.

(1) 다음 클래스를 device 패키지에 속하게 하고자 한다. 빈칸에 적합한 코드를 작성하라.

package device;

public class TV{
   private int size;
   public TV(int size){ this.size = size; }
}

 

(2) 앞에서 작성한 TV 클래스를 활용하는 Home 클래스를 작성한다. Home 클래스를 app 패키지에 저장하고자 할 때 빈칸에 적합한 코드를 작성하라.

package app;
import device.TV;

public class Home {
   public Home() { TV myTv = new Tv(65); }
}

 

(3) TV 클래스와 Home 클래스를 컴파일한 TV.class 와 Home.class의 경로명은?

TV 클래스 경로명 : device.TV.class

Home 클래스 경로명 : app.Home.class

 


6. Wrapper 클래스에 대한 질문이다. 다음 물음에 답하여라.

(1) 정수 20을 문자열 변수 s1에 "20"으로 저장하는 코드를 작성하라.

답 : String s1 = Integer.toString(20);

 

 

(2) 문자열 "35.9"를 double 타입 변수 d에 실수 값 35.9로 저장하는 코드를 작성하라.

답 : double d = Double.parseDouble("35.9");

 

(3) "true" 문자열을 boolean 타입 변수 b에 불린 값 true로 저장하는 코드를 작성하라.

답 : boolean b = Boolean.parseBoolean("true");

 

(4) 정수 30을 이진수의 문자열로 변환하여 s2에 저장하는 한 줄의 코드를 작성하라.

답 : String s2 = Integer.toBinaryString(30);
 

(5) 문자 'c'를 문자열 "c"로 변환하여 변수 c에 저장하는 한 줄의 코드를 작성하라.

 

답 : String c = Character.toString('c');


7. 다음 코드의 실행 결과와 실행 결과의 이유를 말하라.

 

답 : true

       false

 

이유 : String a = "가나다라"; 이 부분은 스트링 리터럴 테이블에 생성되며 "가나다라" 라는 문자열 또한 스트링 리터럴 테이블에 생성되어 서로 같은 부분을 참조하기 때문에 true가 반환되고 객체 b는 힙 메모리 영역에 새로 할당된 부분을 참조하기 때문에 스트링 리터럴 테이블을 참조하는 a와 힙 메모리 영역을 참조하는 b는 서로 다른 부분을 참조하므로 false가 반환된다. 

         


8. 다음 코드가 실행된 후 a, b, c 문자열은 무엇인가?

 

답 : a →         Oh, Happy

       b →  Oh, Happy

       c →  Oh, Happy Day.

 


9. 다음 코드에 대해 물음에 답하여라.

(1) a와 == 연산을 수행하였을 때 true가 되는 문자열을 b~f 중 모두 골라라.

답 : b

 

(2) f와 equals() 연산을 수행하였을 때 true가 되는 문자열을 a~e중 모두 골라라.

답 : c, e

 


10. 다음 중 자동 박싱과 자동 언박싱이 있는 부분을 파악하라.

(1) Double PI = 3.14;

자동박싱

 

(2) double pi = PI;

자동 언박싱

 

(3) System.out.println(3 + Integer.valueOf(5));

자동 언박싱

 

(4) if('c' == Character.valueOf('c'));

자동 언박싱

 


11. 100에서 255까지(255 포함)의 난수를 10개 발생시키는 코드이다.

 

(1) Math 클래스를 활용하여 빈칸에 적절한 코드를 작성하라.

for(int i=0; i<10; i++) 
{
  System.out.println((int)(Math.random()*156+100));
  System.out.println(" ");
}
 

(2) Random 클래스로 난수를 발생시키도록 코드 전체를 재작성하라.

package donghun;
import java.util.Random;

public class PersonTest
{
	public static void main(String[] args) 
	{
		Random a = new Random();
		
		for(int i=0;i<10;i++) 
		{
			System.out.print(a.nextInt(156)+100);
			System.out.print(" ");
		}
	}
}

 

 


12. 다음은 2020년 12월 25일의 약속을 저장하기 위해 Calendar 클래스를 활용하는 코드이다. 주석문에 맞도록 코드를 작성하라.

 

Calendar date = Calendar.getInstance();
date.clear();
date.set(Calendar.YEAR, 2020);
date.set(Calendar.MONTH, 11);
date.set(Calendar.DAY_OF_MONTH, 25);
System.out.println("약속 날짜는 "+date.get(Calendar.YEAR)+"년 " + (date.get(Calendar.MONTH)+1)+"월 "+ date.get(Calendar.DAY_OF_MONTH)+"일");