Java 기본 배열 Array
학생 점수 관리 프로그램을 만들기
학생 3명의 수학 점수를 처리
첫번째 학생은 70점, 2번째 학생은 90점, 3번째 학생은 77점
int mathScore1 = 70;
int mathScore2 = 90;
int mathScore3 = 77;
// 전체 총점 구하세요.
System.out.println( mathScore1 + mathScore2 + mathScore3 );
// 평균 구하세요.
System.out.println(( mathScore1 + mathScore2 + mathScore3 ) / 3);
// 정수로만 계산하기때문에 소수점이 나오지 않으니 .0
System.out.println(( mathScore1 + mathScore2 + mathScore3 ) / 3.0);
// 비어있는 공간을 3개 만든다.
int[] mathScore = new int[3];
// 데이터를 넣는다. 오프셋 첫번째 공간 0, 다음 1, ...
mathScore[0] = 70;
mathScore[1] = 90;
mathScore[2] = 77;
// 전체 총점을 구하세요.
// 저장된 데이터를 하나씩 꺼내 더한다.
// 변수이름을 totalScore로 저장하자
int totalScore = mathScore[0] + mathScore[1] + mathScore [2];
System.out.println(totalScore);
// 평균 구하세요.
double avgScore = totalScore / 3.0;
System.out.println(avgScore);
그런데 학생수가 많으면..?
Data Structure
데이터를 효율적으로 저장, 관리, 처리하기 위한 논리적인 구조
// 여러 데이터를 변수 1개로 처리 하자 [Data Structure]
// 수학점수- 70, 90 ,77
Array
// 자바 기본 문법에서 제공하는 Array
// Array(배열) => 여러 데이터를 변수 1개로 처리한다.
// 우선 몇개의 데이터를 저장할지 데이터의 갯수를 설정해야 한다.
Index
우선 C언어와 자바에서의 인덱스에 대한 이해가 필요하다.
사람은 첫번째부터 시작으로 인식하지 0번째부터 시작한다고 생각하지 않는다.
But... C언어와 자바는 0번째부터 시작한다!
인덱스가 0번째부터 시작하는 이유
- 메모리 주소 계산의 용이성:
배열의 인덱스가 0부터 시작하면, 메모리 주소 계산이 간편해집니다. 예를 들어, 배열의 첫 번째 요소는 배열의 시작 주소와 동일하며, 이후 요소들은 시작 주소에 인덱스를 곱한 값을 더하여 계산할 수 있습니다. - 자연수 표현:
0부터 시작하는 인덱싱은 배열의 크기를 표현할 때 유리합니다.
예를 들어, 길이가 N인 배열은 인덱스 범위가 0부터 N−1까지로 설정되어, 마지막 요소를 포함하는 것이 명확해집니다. - 빈 배열 처리:
0을 포함하는 인덱스 체계는 빈 배열을 표현하는 데도 유용합니다.
예를 들어, 길이가 0인 배열은 인덱스가 없음을 직관적으로 나타낼 수 있습니다.
// 학생 10명의 점수가 있습니다.
// 70, 77, 100, 97, 43, 66, 88, 69, 58, 91
// 1. 배열을 만드세요.
// 2. 데이터를 저장하세요.
int[] engScore= {70, 77, 100, 97, 43, 66, 88, 69, 58, 91};
CPU는 아래와같이 인덱스를 만들어두고 배열값을 저장한다.
1번째 | 2번째 | 3번째 | 4번째 | 5번째 | 6번째 | 7번째 | 8번째 | 9번째 | 10번째 |
인덱스 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
70 | 77 | 100 | 97 | 43 | 66 | 88 | 69 | 58 | 91 |
// 3. 총합을 구하세요.
// 반복문을 이용
int totalEngScore = 0;
for ( int i = 0 ; i < 10 ; i=i+1){
totalEngScore = totalEngScore + engScore[i];
}
System.out.println(totalEngScore);
// 1번째
// engScore[0] + totalEngScore = totalEngScore에 저장
// 70+0 = totalEngScore
// 2번째
// engScore[1] + totalEngScore = totalEngScore
// 77+70= totalEngScore
// i <10 될때까지 반복
int totalEngScore = 0;
for ( int i = 0 ; i < engScore.length ; i++){
totalEngScore = totalEngScore + engScore[i];
}
System.out.println(totalEngScore);
배열의 개수를 알아서 계산해주는 .length
i=i+1 도 i++ 로 단축하기
System.out.println(totalEngScore/(double)engScore.length)
;
.length는 정수만 계산해줌
실수로 나타내주기위해서는 (double)engScore.length
int totalEngScore = 0;
for ( int i =0 ; i<engScore.length ; i++ ){
totalEngScore += engScore[i];
}
System.out.println(totalEngScore);
+=왼쪽 변수에 오른쪽 값을 더한 후 그 결과를 다시 왼쪽 변수에 할당하는 복합 대입 연산자
A += B는 A = A + B와 동일한 의미
double[] data=new double[5];
data[0] = 10.0;
data[1] = 20.0;
data[2] = 30.0;
for (int i = 0 ; i < data.length ; i++ ){
System.out.println(data[i]);
배열 생성시 값이 지정되지 않으면 기본값으로 저장된다.
데이터 타입초기값
int | 0 |
double | 0.0 |
char | '\u0000' |
boolean | false |
참조 타입(String 등) | null |
Array는 현업에서 잘 사용하진 않는다. (주로 ArrayList, HashMap 사용)
WHY? 데이터 추가, 관리하기가 힘들기 때문에