혜야의 코딩스토리
배열 본문
“배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것”
Int[ ] score = new int[5]; // 5개의 int값을 저장할 수 있는 배열을 생성한다.
참조변수 score
0x100 |
->
0x100
0 | 0 | 0 | 0 | 0 |
score[0] score[1] score[2] score[3] score[4]
타입[ ] 변수이름 = new 타입[길이]; // 배열의 선언과 생성을 동시에.
배열의 인덱스: 각 요소(저장공간)에 자동으로 붙는 일련번호
“인덱스의 범위는 0부터 ‘배열길이-1’까지”
Int[ ] score = new int[5]; // 길이가 5인 int배열, 인덱스는 [0]~[4]
[배열의 길이]
“배열은 한번 생성하면 실행동안 그 길이를 바꿀 수 없다.”
Int[ ] arr = new int[5]; //길이가 5인 int배열
Int tmp = arr.length; // arr.length의 값은 5이고 tmp에 5가 저장된다.
-> arr.length를 쓰는 이유 : 코드 변경에 유리함.
[배열의 요소 출력 시 배열의 길이 사용]
Int[ ] score = new int[5];
for(int i = 0 ; i < score.length; i++) { //score배열의 요소가 모두 출력된다.
system.out.println(score[i]);
}
[배열의 초기화]
배열의 각 요소에 처음으로 값을 저장하는 것.
Int[ ] score = new int[5];
Score[0] = 50;
Score[1] = 60;
Score[2] = 70;
Score[3] = 80;
Score[4] = 90;
-> Int [ ] score = {50, 60, 70, 80, 90};
[배열의 출력]
Int[ ] iArr = {100,95,80,70,60};
System.out.println(iArr); //배열의 주소값 출력
for(int i=0; i < iArr.length; i++) { //배열의 요소를 순서대로 하나씩 출력
System.out.println(iArr[i]);
}
System.out.println(Arrays.toString(iArr)); // 배열 iArr의 모든 요소를 출력한다. [100,95,80,70,60]이 출력된다.
[배열의 활용]
1. 총합과 평균
-> for문을 이용해서 배열에 저장되어 있는 값들을 모두 더한다.
-> 평균을 나눌 때 좀 더 올바른 값을 얻기 위해 형변환을 해주어야 한다.
(형변환을 하지 않고 int로 나누게 되면 소수점 아래가 생략된 값이 나오므로 어느 한쪽을 float로 형변환 해줘야 함.)
class Ex5_2 {
public static void main(String[] args) {
int sum = 0 ; // 총점을 저장하기 위한 변수
float average = 0.0f; // 평균을 저장하기 위한 변수
int[] score = {100, 88, 100, 100, 90};
for (int i=0; i < score.length ; i++ ) {
sum += score[i];
}
average = sum / (float) score.length ; // 계산결과를 float로 얻기 위해서 형변환
System.out.println("총점 : " + sum);
System.out.println("평균 : " + average);
} // end of main
} // end of class
2. 최대값과 최소값
-> 최대값을 저장할 변수max와 최소값을 저장할 변수 min을 배열의 첫번째 값으로 초기화한다.
-> for문으로 배열의 두번째 요소부터 읽어서 비교한다. (첫번째 값은 초기화하면서 저장했으므로)
class Ex5_3 {
public static void main(String[] args) {
int[] score = { 79, 88, 91, 33, 100, 55, 95 };
int max = score[0]; // 배열의 첫 번째 값으로 최대값을 초기화 한다.
int min = score[0]; // 배열의 첫 번째 값으로 최소값을 초기화 한다.
for(int i=1; i < score.length; i++) {
if(score[i] > max) {
max = score[i];
} else if(score[i] < min) {
min = score[i];
}
} // end of for
System.out.println("최대값 :" + max);
System.out.println("최소값 :" + min);
} // end of main
} // end of class
3. 섞기 (shuffle)
a. 배열에 0부터 9까지 담는다.
b. 반복문을 이용해서 0~9까지 섞는다.
for(int I = 0; i<100; i++) { // 두 요소를 100번 바꾼다.
Int n = (int)(Math.random()*10); // 0.0~0.9에서10을 곱하여야 0~9 중 한 값을 랜덤으로 얻을 수 있다.
Int tmp = 배열이름[0]; // 첫번째 요소를 임시변수에 넣고
배열이름[0] = 배열이름[n]; // 랜덤 값을 첫번째 인덱스에 넣는다.
배열이름[n] = tmp; // 임시변수에 있던 원래 첫번째 값을 랜덤 값의 자리에 넣는다.
}
System.out.println(Arrays.toString(배열이름));
[String 배열]
String[] name = new String[3]; // 3개의 문자열을 담을 수 있는 배열을 생성한다.
String은 참조형이기 때문에 배열 생성 시 null로 초기화 됨.
[커맨드라인 입력받기]
Scanner를 통한 입력뿐만 아니라 커맨드라인(cmd)에 입력도 가능.
공백을 구분자로 값을 줄 수 있음. Ex) abc 123 “Hello world”
“ ”빈문자열은 길이가 0, 자바에서는 길이가 0인 배열 가능함.
입력된 값들은 참조변수 args에 전달되어 문자열 배열을 생성함.
[2차원 배열]
테이블 형태의 데이터를 저장하기 위한 배열
Int[ ][ ] score = new int[4][3]; //4행 3열의 2차원 배열을 생성한다. (4x3=12개의 저장공간 생성)
* 행의 인덱스는 0~3까지
* 열의 인덱스는 0~2까지
* 2차원 배열이란 결국 1차원 배열의 배열
* 1차원 배열의 참조변수들을 배열로 묶은 것
Int[ ][ ] score = {
{100, 100, 100},
{20, 20, 20},
{30, 30, 30},
{40, 40, 40}
}; //2차원 배열의 생성과 초기화를 동시에 함
[Arrays로 배열 다루기]
*배열의 출력*
Arrays.toString(배열이름) : 배열 저장 값을 문자열로 출력
Arrays.deeptostiring(배열이름) : 2차원 배열 저장 값을 문자열로 출력
*배열의 비교*
배열 비교는 비교 연산자 “==”를 사용할 수 없다.
왜냐면, “==”는 참조변수 값을 비교하는 것. 서로 주소가 같을 수 없기 때문에 false 값이 출력될 수 밖에 없다.
String[ ][ ] str2D = new String[ ][ ]{{“aaa”,”bbb”},{“AAA”,”BBB”}};
String[ ][ ] str2D2 = new String[ ][ ]{{“aaa”,”bbb”},{“AAA”,”BBB”}};
System.out.println(Arrays.equals(str2D, str2D2)); // false
-> 1차원 배열 등가비교 : Arrays.equals(배열이름1, 배열이름2)
System.out.println(Arrays.deepEquals(str2D, str2D2)); // true
-> 2차원 배열 등가비교 : Arrays.deepEquals(배열이름1, 배열이름2)
*배열의 복사*
배열의 복사는 copyOf( ), copyOfRange( ) 메서드를 사용
copyOf(배열이름, 복사할 요소의 갯수), copyOfRange( ) 에서 배열의 길이를 초과한 값을 입력하면 초과한 만큼 빈 값이 추가된다.
copyOfRange( ) 메서드에서 to는 범위에 포함되지 않는다.
Ex)
int[ ] arr = {0,1,2,3,4};
int[ ] arr2 = Arrays.copyOf(arr, arr.length); // arr2=[0,1,2,3,4]
int[ ] arr3 = Arrays.copyOf(arr, 3); // arr3=[0,1,2]
int[ ] arr4 = Arrays.copyOf(arr, 7); // arr4=[0,1,2,3,4,0,0]
int[ ] arr5 = Arrays.copyOfRange(arr, 2, 4); // arr5=[2.3] <- 4(to)는 불포함
int[ ] arr6 = Arrays.copyOfRange(arr, 0, 7); // arr6=[0,1,2,3,4,0,0]
*배열의 정렬*
Arrays.sort( ) 메서드는 배열의 요소를 오름차순으로 정렬해준다.
Ex)
Int{ } arr = {3,2,0,1,4};
Arrays.sort(arr); // 배열 arr을 정렬한다.
System.out.println(Arrays.toString(arr)); // [0,1,2,3,4]
'꿈 : 멋진 개발자 🧸 > 자바의 정석' 카테고리의 다른 글
객체지향 프로그래밍 I (0) | 2022.05.02 |
---|---|
Method 메서드 (0) | 2022.04.29 |
연산자 (0) | 2022.04.28 |
변수 (0) | 2022.04.28 |
조건문과 반복문 (=제어문) (0) | 2022.04.28 |