본문 바로가기
솔루션모음/자바 기초부터 하나씩

[자바 기초부터 하나씩/7장 연습문제 솔루션 답지 해답] 배열

by 이얏호이야호 2020. 3. 31.

1.참 또는 거짓

 

만약 거짓이면, 이유를 설명하여라.

 

a. 배열에 저장된 값은 모두 같은 유형이어야 한다.

= .

 

b. 모든 자바 배열의 인덱스는 1로부터 시작된다.

= 거짓. 0부터 시작한다.

 

c. 자바 배열은 많아야 65,535항목을 저장할 수 있다.

= 거짓. 정수형이며 음수는 저장 불가능하다.

 

d. 2차원 배열은 배열들의 배열이다.

= .

 

e. 배열이 메소드로 전달될 때, 인수(argument) 배열의 값이 매개변수(parameter) 배열로 복사된다.

= 거짓. 배열의 값이 아닌 주소가 복사된다.

 

f. 일단 선언되면, 배열 참조의 값을 변경할 수 없다

=거짓. 변경 가능하다.

 

g. 일단 선언되면, 배열 요소의 값을 변경할 수 없다.

= 거짓. 변경가능하다.

 

h. 일단 선언되면, 배열의 크기를 변경할 수 없다.

= .

 

i. 자바에서는 3차원 배열을 금지한다.

= 거짓. 사용가능하다.

 

j. 자바 배열의 인덱스 값은 정수이어야 한다..

= .

2. 오류 설명

 

swap(a[0],a[1]) 문이 a[0]a[1]에 저장된 값을 교환하지 못하는 이유를 설명하여라.

 

public static swap(int x, int y){

int temp=x;

x=y;

y=temp;

}

= swap메소드가 호출될 때 배열의 값 (a[0],a[1])이 복사되어 전달되어지기 때문에 값을 바꿔도 배열에는 영향을 끼치지 못한다.

 

5. 값 추적

다음 코드를 실행한 후에 a배열에 저장된 값들은 무엇인가?

int []a = new int[10];

a[0]=0;

a[1]=1;

for(int i=2;i<a.length;i++)

a[i]=2*a[i]-1-a[i-2];

a[0] = 0, a[1] = 1, a[2] = 2 , a[3] = 3, a[4] = 4, a[5] = 5, a[6] = 6, a[7] = 7, a[8] = 8

a[9] = 9

 

6. 값 추적

각각의 iii, iv, v, vi, vii 행을 실행한 후에 ab의 배열에 저장된 값을 결정하여라.

i. int[] a=new int[10];

ii. int[] b=new int[10];

iii. for(int i=0;i<a.length;i++)

a[i]=2*i-1;

iv. for(int i=0;i<b.length;i++)

b[i]=2*i+1;

v. for(int i=0;i<a.length;i++)

a[i]=b[i]-1;

vi. a=b;

vii. b=a;

iii.

a = -1 1 3 5 7 9 11 13 15 17

b = 0 0 0 0 0 0 0 0 0 0

iv.

a = -1 1 3 5 7 9 11 13 15 17

b = 1 3 5 7 9 11 13 15 17 19

v.

a = 0 2 4 6 8 10 12 14 16 18

b = 1 3 5 7 9 11 13 15 17 19

vi.

a = 1 3 5 7 9 11 13 15 17 19

b = 1 3 5 7 9 11 13 15 17 19

vii.

a = 1 3 5 7 9 11 13 15 17 19

b = 1 3 5 7 9 11 13 15 17 19

7. 컴파일러 실행

 

다음 각 코드에서 오류()을 찾아라.

a. char[] a = new char[10];

a[10]='s';

a[9]=76;

= a[9]까지 존재하기 때문에 a[10]은 잘못되었다.

 

b. char[] a = new char[19];

char[9]='s';

= 배열에 접근할 때 이름[인덱스] 이기 때문에 a[9]='s'; 가 맞다.

 

c. char[] a= new int[10];

a[0]='s';

a[1]=80;

= 선언한 타입과 생성한 타입이 다르다.

 

d. int[] a;

a=new int[255];

a[0]='s'

a[a[0]]=35;

a[35]=12,345,654,321;

= int 값은 2,147,483,467까지 표현 가능한데 그 범위를 넘어가서 a[35]의 값을 새로 설정해야 한다.

 

e. int[] a;

a = new int[255];

a[0] = a.length;

a[0]--; a.length--;

a[a[0]] = 2;

= length 값은 수정이 불가능하다. a.length--;는 올바르지 않다.

 

f. int[] b = new int[9];

int[][] a;

a= new int[255][];

a[0]=b;

a[0][3]=9;

a[3][0]=9;

= a[3]이 가리키는 배열이 없기 때문에 a[3][0]에 값을 쓸 수 없다.

12. 출력 계산

다음 프로그램은 퍼즐에 대해 시작 퍼즐 배열의 해결 가능성을 계산하기 위한 좀 더 세련된 메소드를 보여준다. 손으로 프로그램을 추적해보고, length++numSwaps += length 문장이 얼마나 많이 진행되는지를 세어보아라 출력은 무엇인가?

출력 = 9

Unsolvable

실행 4.

 

i. int[] a = { -1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };

출력 = 0

Solvable

실행 0.

 

ii. int[] a = { -1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 14 };

출력 = 1

Unsolvable

실행 1.

 

(i)(ii)의 데이터를 사용하여, 이 메소드에 의해 수행되는 단계의 수와 7.10절의 사례연구에서 사용된 좀 더 직관적인 countInversions(...) 메소드에 의해 수행되는 단계의 수를 비교하여라. countInversions(...)에 의해 요구되는 단계의 수는 43-44행에 있는 if문의 실행횟수와 45행의 실행횟수를 더한 것이다.

 

 

댓글