[이것이 자바다] 05 참조 타입 확인문제
열거 타입
한정된 값만 가진 데이터를 열거 타입(enumeration type)이라고 한다.
ex) {월,화,수,목,금,토,일}, {봄,여름,가을,겨울}
열거 타입을 선언하기 위해선 열거 타입 소스 파일을 생성해야 한다.
열거 타입의 이름은 관례적으로 첫 문자를 대문자로, 나머지는 소문자로 구성한다.
Week.java
MemberGrade.java
ProductKind.java
열거 상수는 관례적으로 모두 대문자로 작성한다.
만약 두개 이상의 단어로 구성되어 있다면 _
을 사이에 넣어준다.
ex)
public enum Week{
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
확인문제
참조 타입에 대한 설명으로 틀린 것은?
- 참조 타입에는 배열, 열거, 클래스, 인터페이스가 있다.
- 참조 타입 변수의 메모리 생성 위치는 스택이다.
- 참조 타입에서 ==, != 연산자는 객체 번지를 비교한다.
- 참조 타입은 null 값으로 초기화 할 수 있다.
변수의 이름은 스택에 생성되지만, 실제 값은 힙에 생성된다.
자바에서 메모리 사용에 대한 설명으로 틀린 것은?
- 로컬 변수는 스택 영역에 생성되며 실행 블록이 끝나면 소멸된다.
- 메소드 코드나, 상수, 열거 상수는 정적(메소드) 영역에 생성된다.
- 참조되지 않는 객체는 프로그램에서 직접 소멸 코드를 작성하는 것이 좋다.
- 배열 및 객체는 힙 영역에서 생성된다.
자바는 객체에 대한 소멸 권한을 주지 않는다.
참조되지 않는 객체는 Garbage Collector에서 자동으로 제거한다.
String 타입에 대한 설명으로 틀린 것은?
- String은 클래스이므로 참조 타입니다.
- String 타입의 문자열 비교는 == 을 사용해야 한다.
- 동일한 문자열 리터럴을 저장하는 변수는 동일한 String 객체를 참조한다.
- new String(“문자열”)은 문자열이 동일하더라도 다른 String 객체를 생성한다.
String 타입의 문자열 비교는 .equals()를 사용해야 한다.
문자열은 동일하더라도 객체가 다른 경우가 있기 때문이다.
배열을 생성하는 방법으로 틀린 것은?
- int[] array = {1,2,3};
- int[] array;array = {1,2,3};
- int[] array = new int[3];
- int[][] array = new int[3][2];
본 적도 없는 생성 방법이다…
배열의 기본 초기값에 대한 설명으로 틀린 것은 무엇인가?
- 정수 타입 배열 항목의 기본 초기값은 0이다.
- 실수 타입 배열 항목의 기본 초기값은 0.0f 또는 0.0이다.
- boolean 타입 배열 항목의 기본 초기값은 true 이다.
- 참조 타입 배열 항목의 기본 초기값은 null이다.
boolean 타입 배열의 초기값은 false이다.
array.length의 값과 array[2].length의 값은?
int[][] array = {
{95, 86},
{83, 92, 96},
{78, 83, 93, 87, 88}
};
- array.length: 3
- array[2].length: 5
주어진 배열의 항목에서 최대값을 구해보세요(for문 사용)
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);
}
}
주어진 배열의 전체 항목의 합과 평균값을 구해보세요 (중첩 for)
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++;
}
}
avg = (double)sum/cnt;
System.out.println("sum: " + sum);
System.out.println("avg: " + avg);
}
}
알맞은 코드를 작성하시오
학생 수와 각 학생들의 점수를 입력받아, 최고 점수 및 평균 점수를 구하는 프로그램
import java.util.Scanner;
public class Exercise09{
public static void main(String[] args){
boolean run = true;
int studentNum = 0;
int[] scores = null;
Scanner scan = new Scanner(System.in);
while(run){
System.out.println("-------------------");
System.out.println("1.학생수|2.점수입력|3.점수리스트|4.분석|5.종료");
System.out.println("-------------------");
System.out.print("선택> ");
int selectNo = scan.nextInt();
if(selectNo == 1){
System.out.print("학생수> ");
studentNum = scan.nextInt();
scores = new int[studentNum];
}else if(selectNo == 2){
for(int i = 0; i < studentNum; i++){
System.out.print("scores[" + i + "]> ");
scores[i] = scan.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;
for(int i = 0; i < studentNum; i++){
if(scores[i] > max) max = scores[i];
sum += scores[i];
}
System.out.println("최고 점수: " + max);
System.out.println("평균 점수: " + (double)sum/studentNum);
}else if(selectNo == 5){
run = false;
}
}
System.out.println("프로그램 종료");
}
}