배열 수업하는 날에 신나게 졸아서 수업 내용이 많이 날아갔다..
그래서 '이것이 자바다' 책을 참조하여 내용과 관련된 예제는 중간중간 넣으면서 포스팅을 하려한다.
책 내용 정리 같지만, 평소하던 포스팅보다 더 조리있는 것 같다.ㅎㅎ
배열이름 [인덱스번호]
score[0];
socre[1];
//배열 변수를 선언하는 방법1
//타입[] 변수;
int[] intArr;
double[] doubleArr;
String[] stringArr;
//배열 변수를 선언하는 방법2
//타입 변수[];
int intArr[];
double doubleArr[];
String stringArr[];
String[] arr = new String[3]
데이터타입[] 변수 = {값0, 값1, 값2, 값3, ...};
String[] names = {"Kim", "Park", "Lee"};
names[1] = "Yu"; //names[1]인 "Park"를 "Yu"로 변경
//배열변수와 함께 선언하는 방법
int[] score = {87, 90, 45};
//new 연산자를 사용하는 방법
int[] score;
score = new int[] {87, 90, 45};
//배열변수를 이미 선언하고, 다른 실행문에서 중괄호를 사용하면 컴파일 에러
int[] score;
score = {87, 90, 45};
//타입[] 변수 = new 타입[길이];
String[] stringArr = new String[5];
타입[] 변수 = null;
변수 = new 타입[길이];
int[] scores = new int[30];
//scores[0] ~ scores[29] 까지 모두 기본값 0으로 초기화
String[] names = new String[30];
//names[0] ~ names[29] 까지 모두 기본값 null으로 초기화
public class Ex02_배열의_초기화 {
public static void main(String[] args) {
int[] score;
//score = {50, 60, 70, 80 ,90}; //틀린 방법
score = new int[] {50, 60, 70, 80 ,90}; //new int[] 생략 가능
System.out.println(score); //[I@6504e3b2 (주소값)
for (int i = 0; i < score.length ; i += 1) {
System.out.print(score[i] + " ");
} //50 60 70 80 90
System.out.println("");
char[] chArr = new char[] {'a', 'b', 'c'};
System.out.println(chArr); //abc
for (int i = 0; i < chArr.length ; i += 1) {
System.out.print(chArr[i] + " ");
} //a b c
}
}
분류 | 데이터 타입 | 초기값 |
---|---|---|
기본 타입(정수) | byte[] char[] short[] int[] long[] | 0 '\u0000' 0 0 0L |
기본 타입(실수) | float[] double[] | 0.0F 0.0 |
기본 타입(논리) | boolean[] | false |
참조 타입 | 클래스[] 인터페이스[] | null null |
//배열변수.length;
int[] intArr = { 10, 20, 30 };
int num = intArr.length;
System.out.println(num); // 3
public class Ex01_배열기초 {
public static void main(String[] args) {
int[] arr = new int[10];
double[] darr = new double[10];
System.out.println(arr.length + ", " + darr.length);
// 10, 10
//arr 을 전부 0으로 초기화
for(int i = 0 ; i < arr.length ; i += 1) {
arr[i] = 0;
darr[i] = 0;
System.out.println(arr[i] + ", " + darr[i]);
}
//0, 0.0 (10개 출력)
String[] strs = {"Paris", "Seoul", "Tokyo", "Washington"};
for (int i = 0; i < strs.length ; i += 1) {
System.out.println("index " + i + " = " + strs[i]);
}
/*
index 0 = Paris
index 1 = Seoul
index 2 = Tokyo
index 3 = Washington
*/
}
}
import java.util.Arrays;
public class Ex03_배열의_출력 {
public static void main(String[] args) {
int[] iArr1 = new int[10];
int[] iArr2 = new int[10];
//int[] iArr3 = new int[] {1, 2, 3, 4, 5, 6}; //초기화
int[] iArr3 = {100, 95, 90, 85, 80};
char[] chArr = {'a', 'b', 'c', 'd'};
for (int i = 0 ; i < iArr1.length ; i += 1) {
iArr1[i] = i + 1;
System.out.print(iArr1[i] + " "); //1 2 3 4 5 6 7 8 9 10
}
System.out.println("");
for (int i = 0; i < iArr2.length ; i += 1) {
iArr2[i] = (int)(Math.random()*10+1);
System.out.print(iArr2[i] + " "); //10 2 5 4 8 5 7 3 10 4
}
//Arrays.toString(arrname); 객체를 문자열로 리턴하는 메소드
System.out.println(Arrays.toString(iArr2)); //[1, 1, 9, 4, 5, 3, 3, 7, 1, 7]
System.out.println(Arrays.toString(iArr3)); //[100, 95, 90, 85, 80]
System.out.println(Arrays.toString(chArr)); //[a, b, c, d]
}
}
public class Ex04_배열의활용_총합평균 {
public static void main(String[] args) {
int sum = 0;
float average = 0f;
int[] score = {100, 88, 100, 99 ,90};//초기화
for (int i = 0; i < score.length ; i += 1) {
sum += score[i];
System.out.print(sum + " "); //100 188 288 387 477
average = (float)(sum/score.length);
}
System.out.println("sum = " + sum + ", average = " + average);
//sum = 477, average = 95.0
}
}
public class Ex05_배열의활용_최댓값최솟값 {
public static void main(String[] args) {
int[] score = {79, 88, 91, 33, 100, 55, 95};
int max, min;
max = min = score[0];
//System.out.println("max: " + max + ", min: " + min);
//max: 79, min: 79
for (int i = 0 ; i < score.length ; i += 1) {
System.out.println(score[i]);
if (score[i] > max) {
//앞 배열과 비교 후 더 크면 max에 저장
max = score[i];
} else if (score[i] < min) {
//앞 배열과 비교 후 더 작으면 min에 저장
min = score[i];
}
System.out.println("max: " + max + ", min: " + min);
}
System.out.println("최종 max: " + max + ", min: " + min);
//max: 100, min: 33
}
}
import java.util.Arrays;
public class Ex06_배열의활용_섞기 {
public static void main(String[] args) {
int[] numArr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
System.out.println(Arrays.toString(numArr));
for(int i = 0; i < 100 ; i += 1) {
int n = (int)(Math.random()*10); //0~9까지의 랜덤 정수 생성
System.out.println("n: " +n);
int tmp = numArr[0];//백업
System.out.println("tmp = numArr[0]: " + tmp);
numArr[0] = numArr[n];
System.out.println("numArr[0] = numArr[" + n + "]: " +numArr[0] );
numArr[n] = tmp;
System.out.println("numArr[" + n + "] = tmp : " +numArr[n]);
System.out.println("");
}
System.out.println(Arrays.toString(numArr));
}
}
public class Ex07_배열의활용_로또번호생성 {
public static void main(String[] args) {
int[] ball = new int[45];
for (int i = 0; i < ball.length ; i += 1) {
ball[i] = i+1;
}
//0~5까지의 볼의 순서만 교체 (6개)
for(int i = 0; i < 6 ; i += 1) {
int j = (int)(Math.random()*45);
int tmp = ball[i];
ball[i] = ball[j];
ball[j] = tmp;
}
for (int i = 0; i < 6 ; i += 1) {
System.out.printf("ball[%d] = %d%n", i, ball[i]);
//\n : os가 줄바꿈
//%n : JVM이 줄바꿈
}
}
}
최댓값과 최솟값 예제는 처음엔 이해가 안 됐다.
새로운 값이 들어가면서 앞의 min과 max를 계속 갱신하니까
실제로 max인 100과 min인 33도 뒤로 오는 값들로 갱신되어
최종 max와 min값이 배열 마지막 쯤에 있는 숫자들로 남을 것이라 생각 되었다.
근데 아니더라!! 그래서 과정을 다 찍어봤는데,
앞의 값보다 크거나 작지 않은 중간 숫자들은 그냥 버려지는 거였다.
이제 조금 공부했다고 다 찍어볼 수도 있게 됐다.. 예전엔 어떻게 변수를 선언해야 프린트해서 볼 수 있는지도 몰랐으니까 성장했다고 볼 수 있겠지?