목차
[신용권의 이것이 자바다 챕터 4 조건문과 반복문 확인 문제 풀이]
■ 문제1 답 : 4번
① ㅇㅇ. 참조 타입에는 배열, 열거, 클래스, 인터페이스가 있다.
② ㅇㅇ. 참조 타입 변수는 스택에 생성되며, 변수가 참조하는 객체가 힙에 생성된다.
③ ㅇㅇ. 참조 타입에서 비교 연산은 주소값 비교이다.
④ ㄴㄴ. 참조 타입은 null 값으로 초기화 할 수 있다. 아직 참조할 게 없다는 뜻.
■ 문제2 답 : 3번
① ㅇㅇ. 로컬 변수는 스택에 생성되고 코드 블록이 끝나면 지워진다
② ㅇㅇ. 메소드 코드, 상수, 열거 상수는 정적 메소드 영역에 생성된다. (변수가 스택, 객체가 힙)
③ ㄴㄴ. JVM이 알아서 가비지 콜랙터로 지워버리니, 개발자가 굳이 코드 짤 수고 불필요
④ ㅇㅇ. 배열 및 객체는 힙에 생성된다.
■ 문제3 답 : 2번
① ㅇㅇ. String은 클래스이므로 참조타입이다.
② ㄴㄴ. 주소 비교하면 ==로하고, letter by letter 비교하려면 equals() 써야한다.
③ ㅇㅇ. 동일한 *리터럴*이라면 (new 안쓰고) 동일한 String 객체이다.
④ ㅇㅇ. new쓰면 그렇지. 다른 객체 생성하지요.
■ 문제4 답 : 2번
값목록을 주려면 선언과 동시에 초기화 해야하지, 두 줄 이상으로 나눠 작성하면 안된다. 아니면 new를 쓰던가.
int[] array; array = new int[] {1,2,3} 또는 int[] array = {1,2,3} 으로 해야한다.
■ 문제5 답 : 3번
boolean type 배열의 초기값은 false이다.
■ 문제6 답 : 3, 5
array.length()만 하면 행수를 새니까 3. array[2].length()로 하면 2번째 줄의 크기를 재는거니까 5.
■ 문제7 답 (아래 참고, 향상된 포문과, ?를 사용한 if 조건문을 활용해 보았음.)
public class Ex07 {
public static void main(String[] args) {
int max = 0;
int[] arr = {1,5,3,8,2};
for (int ii:arr) {
max = (ii>max)? ii:max;
}
System.out.println(max);
}
}
■ 문제8 답
public class Ex08 {
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 ii=0; ii<array.length; ii++) {
for (int jj=0; jj<array[ii].length; jj++) {
sum += array[ii][jj];
cnt++;
}
}
avg = 1.0*sum/cnt;
System.out.println("sum: " + sum);
System.out.println("avg: " + avg);
}
}
■ 문제 9 답:
import java.util.Scanner;
public class Ex09 {
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.print("선택> ");
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<scores.length; i++) {
System.out.print("scores[" + i + "]> ");
scores[i] = scanner.nextInt();
}
} else if(selectNo == 3) {
for(int i=0; i<scores.length; i++) {
System.out.println("scores[" + i + "]: " + scores[i]);
}
} else if(selectNo == 4) {
int max = 0;
int sum = 0;
double avg = 0;
for(int i=0; i<scores.length; i++) {
max = (max<scores[i])? scores[i] : max;
sum += scores[i];
}
avg = (double) sum / studentNum;
System.out.println("최고 점수: " + max);
System.out.println("평균 점수: " + avg);
} else if(selectNo == 5) {
run = false;
}
}
System.out.println("프로그램 종료");
}
}