'자바의 정석'책의 예제 및 연습문제입니다.
소스풀이해봤습니다.
#참고사항 : for문을 사용하여 배열의 값을 출력할때 개발자들은 주로 length또는 size()를 이용합니다.
하지만 length, size()를 사용하는 것은 속도저하를 초례할 수 있습니다. 왜냐하면, for문을 반복하면서 해당 length와 size()함수를 매번 호출하기 때문입니다.
그러므로 변수하나를 선언하여 한번만 호출하게끔 사용하는 것이 속도저하를 초례하지 않는 좋은 방법입니다.
public class ArrayEx1 {
public static void main(String[] args) {
//점수 합계를 위한 sum변수 선언
int sum=0;
//점수 평균을 위한 average변수 선언
float average = 0f;
//점수를 위한 int형 배열 score변수 선언
int[] score = {100,88,100,100,90};
//int형 배열 score변수의 길이(크기)만큼 반복문 수행
for(int i=0;i<score.length;i++){
//int형 배열인 score[i]번째의 값을 sum변수에 더하여 대입.
sum+=score[i];
}
//평균 계산 결과를 float형으로 표현하기 위한 (float)형변환
average = sum/(float)score.length;
System.out.println("SUM : "+sum);
System.out.println("AVERAGE : "+average);
}
}
public class ArrayEx2 {
public static void main(String[] args) {
//int형 배열 score변수 선언
int[] score = {79,88,91,33,100,55,95};
//최대값 max변수 선언 및 score배열 변수의 첫번째 값으로 초기화
int max = score[0];
//최소값 min변수 선언 및 score배열 변수의 첫번째 값으로 초기화
int min = score[0];
//score배열 변수의 길이(크기)만큼 반복문 수행
for(int i=0;i<score.length;i++){
//score의 i번째의 값이 max변수(최대값)보다 크다면
//max변수에 score의 i번째의 값을 대입
if(score[i] > max)max=score[i];
//score의 i번째의 값이 min변수(최소값)보다 작다면
//min변수에 score의 i번째의 값을 대입
if(score[i] < min)min=score[i];
}
System.out.println("최대값 : "+max);
System.out.println("최소값 : "+min);
}
}
public class ArrayEx3 {
public static void main(String[] args) {
//크기가 10인 int형 배열 number변수 선언
int[] number = new int[10];
//number변수의 길이(크기)만큼 반복문 수행
for(int i=0;i<number.length;i++){
//number변수 i번째에 i값을 대입
number[i] = i;
System.out.print(number[i]);
}
System.out.println();
//반복문 100번 수행
for(int i=0;i<100;i++){
//int형 n변수에 0~9사이의 난수를 대입.
int n = (int)(Math.random() * 10);
//int형 temp변수에 number변수 0번째의 값을 대입.
int temp = number[0];
//number변수 n번째의 값을 number변수 0번째에 대입.
number[0] = number[n];
//number변수 n번째에 temp변수 값을 대입.
number[n] = temp;
}
for(int i=0;i<number.length;i++){
System.out.print(number[i]);
}
// 정리 :
// number[0]번째의 값과 number[n]번째의 값을 서로 교환한다.
// ex)number[0]의 초기 값은 0이다.
// 난수가 발생하여 n의 값은 5다. number[5]의 값은 6이다.
// (number[0] ~ number[9]의 값은 0,1,2,3,4,5,6,7,8,9이다.)
// number[0]의 값에 number[5]의 값인 6을 대입하고,
// number[5]의 값에는 number[0]의 값이였던 0을 대입된다. temp변수의 사용 목적.
// 이 과정을 100번 반복수행한다. n의 값이 난수이기 때문에 랜덤하게 섞이게 된다.
}
}
public class Lotto {
public static void main(String[] args) {
//로또번호를 위한 45크기의 lotto변수 선언
int[] lotto = new int[45];
//값을 변경해주기 위해 임시 저장소역할을 할 temp변수 선언 및 초기화
int temp = 0;
//임의의 값을 받아오기 위한 randomNum변수 선언 및 초기화
int randomNum = 0;
//lotto변수 배열의 각 요소에 1~45까지의 값을 대입.
for(int i=0;i<lotto.length;i++){
//lotto[0] : 1 ~ lotto[44] :45
lotto[i] = i+1;
}
//100번의 반복문을 수행하며 섞기 수행
for(int i=0;i<100;i++){
//randomNum변수에 난수값 발생하여 대입
randomNum = (int)(Math.random() * 45);
temp = lotto[0];
lotto[0] = lotto[randomNum];
lotto[randomNum] = temp;
}
for(int i=0;i<6;i++){
System.out.print(lotto[i]+" ");
}
}
}