public class Ex5_5 {
// [5-5] 다음은 1과 9사이의 중복되지 않은 숫자로 이루어진 3자리 숫자를 만들어내는 프
// 로그램이다. (1)~(2)에 알맞은 코드를 넣어서 프로그램을 완성하시오.
// [참고] Math.random()을 사용했기 때문에 실행결과와 다를 수 있다.
// [연습문제]/ch5/Exercise5_5.java
// class Exercise5_5 {
// public static void main(String[] args) {
// int[] ballArr = {1,2,3,4,5,6,7,8,9};
// int[] ball3 = new int[3];
// // 배열 ballArr의 임의의 요소 2개를 골라서 위치를 바꾼다. 20번 반복
// for(int x=0;x < 20;x++) {
// int i = (int)(Math.random() * ballArr.length);
// int j = (int)(Math.random() * ballArr.length);
// int tmp = 0;
// /*
// (1) 알맞은 코드를 넣어 완성하시오.
// */
// }
// // 배열 ballArr의 앞에서 3개의 수를 배열 ball3로 복사한다.
// /* (2) */
// for(int i=0;i<ball3.length;i++) {
// System.out.print(ball3[i]);
// }
// } // end of main
// } // end of class
// [실행결과]
// 486
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] ballArr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int[] ball3 = new int[3];
// 배열 ballArr의 임의의 요소 2개를 골라서 위치를 바꾼다. 20번 반복
for (int x = 0; x < 20; x++) {
int i = (int) (Math.random() * ballArr.length);
int j = (int) (Math.random() * ballArr.length);
int tmp = 0;
// 정렬...
// 0~ 8까지의 숫자를 추출하여.
// i 번째의 숫자를 임시 변수에 넣고
// j 번째의 숫자를 i 번째에 넣어준다.
// 임시변수의 숫자를 j에 넣어준다.
// 해설에서도 설명한것처럼 두개의 컵에 내용을 바꿀려면.
// 임시적인 그릇이 하나가 필요하여 a컵의 내용을 그릇에 담고
// 비워진 a컵에 b컵의 내용물을 넣은다음 b컵의 내용이 비워졌기에
// 그릇에 담겨진 내용물을 b컵에 담아 a와 b를 교환된것을 확인한다.
// 배열의 1,2,3,4,5,6,7,8,9 를 arr[0]~ arr[8] 에서 내용물의 위치만
// 바꾸어준다고 생각하면 된다.
tmp = ballArr[i];
ballArr[i] = ballArr[j];
ballArr[j] = tmp;
/*
* (1) 알맞은 코드를 넣어 완성하시오.
*/
}
// 배열 ballArr의 앞에서 3개의 수를 배열 ball3로 복사한다.
/* (2) */
for (int i = 0; i < ballArr.length; i++) {
System.out.print(ballArr[i]);
}
System.out.println();
System.arraycopy(ballArr, 0, ball3, 0, 3);
for (int i = 0; i < ball3.length; i++) {
System.out.print(ball3[i]);
}
}
// [해설] 1~9의 숫자를 배열에 순서대로 담고, 반복해서 위치를 서로 바꿈으로써 숫자를 섞
// 는다. 그 다음에 배열의 세 요소를 차례대로 가져오면 중복되지 않은 세 개의 정수를 얻
// 을 수 있다.
// (1)에는 변수 tmp를 이용해서 배열의 i번째 요소(ballArr[i])와 j번째 요소(ballArr[j])
// 의 값을 서로 바꾸는 코드가 들어가야 한다. 배열의 크기인 ballArr.length의 값이 9이므
// 로, (int)(Math.random() * 9)가 되어 변수 i와 j는 0~8사이의 임의의 값이 저장된다.
// 처음에 배열이 생성되고 초기화되면 아래와 같이 1~9의 값이 순서대로 배열에 저장된다.
// 만일 i와 j의 값이 각각 0과 3이면, ballArr[0]과 ballArr[3]의 값을 서로 바꾼다.
// 두 변수에 저장된 값을 서로 바꾸려면, 별도의 저장공간이 필요하다. 두 컵에 담긴 내용
// 물을 서로 바꾸려면, 하나의 빈 컵이 필요한 것처럼. 여기서는 변수 tmp가 빈 컵의 역할
// 을 하게 된다. 아래의 그림은 'tmp = ballArr[0];'이 실행되어 ballArr[0]의 값인 1이 변
// 수 tmp에 저장된 것을 보여준다.
// 다음은 'ballArr[0] = ballArr[3];'이 실행되어 ballArr[3]의 값인 4가 ballArr[0]에
// 저장된 것을 보여준다.
// 마지막으로 'ballArr[3] = tmp;'가 실행되어 tmp의 값인 1이 ballArr[3]에 저장된다.
// 이런 작업을 반복적으로 수행하면, 배열 ballArr의 값들이 뒤섞이게 된다.(Math.random()
// 을 사용했기 때문에 실행할 때마다 다른 결과를 얻을 것이다.)
//
//
}
'프로그래밍 > 자바의정석_5_연습문제' 카테고리의 다른 글
[5-7] 문제 5-6에 동전의 개수를 추가한 프로그램이다. 커맨드라인으로부터 거슬러 줄 금액을 입력받아 계산한다. (0) | 2015.01.05 |
---|---|
[5-6] 다음은 거스름돈을 몇 개의 동전으로 지불할 수 있는지를 계산하는 문제이다. (0) | 2015.01.05 |
[5-4] 2차원 배열 arr2에 담긴 모든 값의 총합과 평균을 구하는 프로그램을 완성하시오. (0) | 2015.01.05 |
[5-3] 배열 arr에 담긴 모든 값을 더하는 프로그램을 완성하시오. (0) | 2015.01.05 |
[5-2] 다음과 같은 배열이 있을 때, arr[3].length의 값은 얼마인가? (0) | 2015.01.05 |