열거 타입

한정된 값만 가진 데이터를 열거 타입(enumeration type)이라고 한다.
ex) {월,화,수,목,금,토,일}, {봄,여름,가을,겨울}

열거 타입을 선언하기 위해선 열거 타입 소스 파일을 생성해야 한다.
열거 타입의 이름은 관례적으로 첫 문자를 대문자로, 나머지는 소문자로 구성한다.

Week.java
MemberGrade.java
ProductKind.java

열거 상수는 관례적으로 모두 대문자로 작성한다.
만약 두개 이상의 단어로 구성되어 있다면 _을 사이에 넣어준다.
ex)

public enum Week{
	MONDAY,
	TUESDAY,
	WEDNESDAY,
	THURSDAY,
	FRIDAY,
	SATURDAY,
	SUNDAY
}

확인문제

참조 타입에 대한 설명으로 틀린 것은?

  1. 참조 타입에는 배열, 열거, 클래스, 인터페이스가 있다.
  2. 참조 타입 변수의 메모리 생성 위치는 스택이다.
  3. 참조 타입에서 ==, != 연산자는 객체 번지를 비교한다.
  4. 참조 타입은 null 값으로 초기화 할 수 있다.

변수의 이름은 스택에 생성되지만, 실제 값은 힙에 생성된다.

자바에서 메모리 사용에 대한 설명으로 틀린 것은?

  1. 로컬 변수는 스택 영역에 생성되며 실행 블록이 끝나면 소멸된다.
  2. 메소드 코드나, 상수, 열거 상수는 정적(메소드) 영역에 생성된다.
  3. 참조되지 않는 객체는 프로그램에서 직접 소멸 코드를 작성하는 것이 좋다.
  4. 배열 및 객체는 힙 영역에서 생성된다.

자바는 객체에 대한 소멸 권한을 주지 않는다.
참조되지 않는 객체는 Garbage Collector에서 자동으로 제거한다.

String 타입에 대한 설명으로 틀린 것은?

  1. String은 클래스이므로 참조 타입니다.
  2. String 타입의 문자열 비교는 == 을 사용해야 한다.
  3. 동일한 문자열 리터럴을 저장하는 변수는 동일한 String 객체를 참조한다.
  4. new String(“문자열”)은 문자열이 동일하더라도 다른 String 객체를 생성한다.

String 타입의 문자열 비교는 .equals()를 사용해야 한다.
문자열은 동일하더라도 객체가 다른 경우가 있기 때문이다.

배열을 생성하는 방법으로 틀린 것은?

  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];

본 적도 없는 생성 방법이다…

배열의 기본 초기값에 대한 설명으로 틀린 것은 무엇인가?

  1. 정수 타입 배열 항목의 기본 초기값은 0이다.
  2. 실수 타입 배열 항목의 기본 초기값은 0.0f 또는 0.0이다.
  3. boolean 타입 배열 항목의 기본 초기값은 true 이다.
  4. 참조 타입 배열 항목의 기본 초기값은 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("프로그램 종료");
	}
}