이것이 자바다 확인문제 (5장 참조 타입)
1. 참조 타입에 대한 설명으로 틀린 것은 무엇입니까?
1) 참조 타입에는 배열, 열거, 클래스, 인터페이스가 있다.
2) 참조 타입 변수의 메모리 생성 위치는 스택이다.
3) 참조 타입에서 ==, != 연산자는 객체 번지를 비교한다.
4) 참조 타입은 null 값으로 초기화할 수 없다.
답: 4)
p.143
참조 타입 변수는 힙 영역의 객체를 참조하지 않는다는 뜻으로 null 값을 가질 수 있다. null 값도 초기값으로 사용할 수 있기 때문에 null로 초기화된 참조 변수는 스택 영역에 생성된다.
2. 자바에서 메모리 사용에 대한 설명으로 틀린 것은 무엇입니까?
1) 로컬 변수는 스택 영역에 생성되며 실행 블록이 끝나면 소멸된다.
2) 메소드 코드나, 상수, 열거 상수는 정적(메소드) 영역에 생성된다.
3) 참조되지 않는 객체는 프로그램에서 직접 소멸 코드를 작성하는 것이 좋다.
4) 배열 및 객체는 힙 영역에 생성된다.
답: 3)
p.141
참조하는 변수나 필드가 없다면 의미 없는 객체가 되기 때문에 이것을 쓰레기로 취급하고 JVM은 쓰레기 수집기(Garbage Collector)를 실행시켜 쓰레기 객체를 힙 영역에서 자동으로 제거한다.
3. String 타입에 대한 설명으로 틀린 것은 무엇입니까?
1) String은 클래스이므로 참조 타입이다.
2) String 타입의 문자열 비교는 == 를 사용해야 한다.
3) 동일한 문자열 리터럴을 저장하는 변수는 동일한 String 객체를 참조한다.
4) new String("문자열")은 문자열이 동일하더라도 다른 String 객체를 생성한다.
답: 2)
p.146
문자열은 String 객체로 생성되고 변수는 String 객체를 참조한다.
p.142
참조 타입 변수들 간의 ==, != 연산은 동일한 객체를 참조하는지, 다른 객체를 참조하는지 알아볼 때 사용된다. 참조 타입 변수의 값은 힙 영역의 객체 주소이므로 결국 주소 값을 비교하는 것이 된다.
p.147
동일한 String 객체이건 다른 String 객체이건 상관없이 문자열만을 비교할 때에는 String 객체의 equals() 메소드를 사용해야 한다.
4. 배열을 생성하는 방법으로 틀린 것은 무엇입니까?
1) int[] array = { 1, 2, 3 };
2) int[] array; array = { 1, 2, 3 };
3) int[] array = new int[3];
4) int[][]array = new int[3][2];
답: 2)
p.153
배열 변수를 이미 선언한 후에 다른 실행문에서 중괄호를 사용한 배열 생성은 허용되지 않는다.
배열 변수를 미리 선언한 후, 값 목록들이 나중에 결정되는 상황이라면 다음과 같이 new 연산자를 사용해서 값 목록을 지정
변수 = new 타입[] {값1, 값2, 값3...};
5. 배열의 기본 초기값에 대한 설명으로 틀린 것은 무엇입니까?
1) 정수 타입 배열 항목의 기본 추기값은 0이다.
2) 실수 타입 배열 항목의 기본 초기값은 0.0f 또는 0.0이다.
3) boolean 타입 배열 항목의 기본 초기값은 true이다.
4) 참조 타입 배열 항목의 기본 초기값은 null이다.
답: 3)
p.156
boolean 타입 배열의 초기값: false
6. 배열의 길이에 대한 문제입니다. array.length의 값과 array[2].length의 값은 얼마입니까?
1 2 3 4 5 | int[][] array = { {95, 86}, {83, 92, 96}, {78, 83, 93, 87, 88} }; | cs |
array.length -> ( 3 )
array.[2].length -> ( 5 )
7. 주어진 배열의 항목에서 최대값을 구해보세요(for문을 이용하세요).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class Exercise07 { public static void main(String[] args) { int max = 0; int[] array = { 1, 5, 3, 8, 2 }; for (int i = 0; i < array.length; i++) { if (array[i] > max) { max = array[i]; } } System.out.println("max: " + max); } } | cs |
8. 주어진 배열의 전체 항목의 합과 평균값을 구해보세요(중첩 for문을 이용하세요).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | public class Exercise08 { public static void main(String[] args) { int[][] array = { {95, 86}, {83, 92, 96}, {78, 83, 93, 87, 88} }; int sum = 0; double avg = 0.0; // 답 int cnt = 0; for (int i = 0; i < array.length; i++) { for(int j = 0; j < array[i].length; j++) { sum += array[i][j]; } cnt += array[i].length; } avg = (double)sum / cnt; System.out.println("sum: " + sum); System.out.println("avg: " + avg); } } | cs |
9. 다음은 키보드로부터 학생 수와 각 학생들의 점수를 입력받아서, 최고 점수 및 평균 점수를 구하는 프로그램입니다. 실행 결과를 보고, 알맞게 작성해보세요(참고로 16라인에서 Scanner의 nextInt() 메소드는 콘솔에 입력된 숫자를 읽고 리턴합니다).
실행 결과
----------------------------------------------------------
1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료
----------------------------------------------------------
선택> 1
학생수> 3
----------------------------------------------------------
1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료
----------------------------------------------------------
선택> 2
scores[0]> 85
scores[1]> 95
scores[2]> 93
----------------------------------------------------------
1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료
----------------------------------------------------------
선택> 3
scores[0]> 85
scores[1]> 95
scores[2]> 93
----------------------------------------------------------
1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료
----------------------------------------------------------
선택> 4
최고 점수: 95
평균 점수: 91.0
----------------------------------------------------------
1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료
----------------------------------------------------------
선택> 5
프로그램 종료
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | import java.util.Scanner; public class Exercise09 { public static void main(String[] args) { boolean run = true; int studentNum = 0; int[] scores = null; Scanner scanner = new Scanner(System.in); while(run) { System.out.println("-----------------------------------------------------"); System.out.println("1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료"); System.out.println("-----------------------------------------------------"); System.out.println("선택> "); int selectNo = scanner.nextInt(); if(selectNo == 1) { System.out.print("학생수> "); studentNum = scanner.nextInt(); scores = new int[studentNum]; } else if(selectNo == 2) { for (int i = 0; i < studentNum; i++) { System.out.print("scores[" + i + "]> "); scores[i] = scanner.nextInt(); } } else if(selectNo == 3) { for (int i = 0; i < studentNum; i++) { System.out.println("scores[" + i + "]: " + scores[i]); } } else if(selectNo == 4) { int max = 0; int sum = 0; double avg = 0.0; for (int i = 0; i < studentNum; i++) { if(scores[i] > max) { max = scores[i]; } sum += scores[i]; } avg = (double)sum / studentNum; System.out.println("최고 점수: " + max); System.out.println("평균 점수: " + avg); } else if(selectNo == 5) { run = false; } } System.out.println("프로그램 종료"); } } | cs |