배열은 Java 뿐만 아니라 모든 프로그래밍언어에 필수로 알아야하는 자료구조라고 생각해요. 수많은 문자들을 일일이 작성해서 일일이 호출한다고 생각하면 상상만해도 불편합니다.... 배열을 통해 불편함 해결해보아요
목차
1)배열에 대해 1-1) 배열값 대입 1-2) 배열은 왜 참조값을 사용할까? 1-3) 배열 사용
2)2차원 배열
3)예제풀이 3-1) 간단한 학생성적 예제 3-2) 최솟값 최대값 구하기 3-3) 3-1)의 심화버전
1) 배열에 대해
int [] grade = new int[3];
이 배열 초기화코드로 설명을 해볼게요
int [] grade 로 배열선언을 합니다 여기에는 1,2,4, 5.4 등의 기본형이아닌 배열만이 들어올 수 있습니다.
new int[3] 이란 int형3개를 담을 수 있는 배열을 새로 만들겠다는 뜻.
배열이 생성되면 그만큼의 메모리를 확보 4byte * 3 = 12byte 확보
int[] grade`변수는`new int[3]로생성한 배열의참조값(x001)을가지고있다. 쉽게말하면 참조값을 통해 실제 메모리에 접근이 가능하다.
코드로 이해해보자
grade 를 출력해보면 이와같은 참조값이 반환이된다. [I == int형을 뜻 함 @뒤에16진수 == 참조값 new int[3] 이 참조값으로 반환된것을 알 수 있어요.
1-1) 배열 값 대입
배열은 0번 인덱스부터 (n-1)까지 존재한다 new int[3] 은 0 , 1 , 2 번 인덱스 존재
1-2) 배열은 왜 참조값을 사용할까??
참조형이란 ? int[] students 와 같이 데이터에 접근하기 위한 참조(주소)를 저장하는 데이터타입을 참조형이라 한다.
쓰는 이유는? 기본형은 크기가 정적으로 정해져있지만 참조형은 동적으로 크기변경이 가능(유연성 제공)
1-3) 배열 사용
다음과 같이 단순 반복을 리팩토링을 해봤다 for문에서 사용한 .length는 배열의 길이를 반환해주는 기능이다. (배열 크기 3) i = 0,1,2 --> for문 반복 i = 3 --> 바로 루프종료. 인덱스는 0부터 시작하므로 학생을 나타내는 부분만 i+1을 해줌으로써 학생 1 ~ 학생3의 점수의 형식으로 출력가능
이러한 형식으로도 배열생성 및 초기화 가능!!!
2) 2차원 배열
배열은 2차원도 생성이 가능하다 행 , 열의 개념을 알고 계신 분들이라면 쉽게 이해하실 수 있을거에요.
[0][0]
[0][1]
[0][2]
[1][0]
[1][1]
[1][2]
→ : for 문 루프가 도는 방향
앞에 위치하는것이 행 , 뒤에 위치하는것이 열 이라고 생각하시면됩니다. [0][1] == 0행 1열
코드로 1부터 증가하는 2x3 행렬을 만들어봤습니다. 여기서 arr.length == 행의 갯수 arr[row].length == 행의 길이 이렇게 코드로 나타내니 좀 더 한눈에 보이죠??
3) 예제풀이
3-1) 간단한 학생의 성적 예제
제가 생각한 예제는 학생의 수를 입력 받은 후 (배열의 크기 입력받기) 각 학생에게 점수를 부여하고 그 반 점수의 평균을 나타내고 평균 이상인 학생들만 출력하게끔 만드는 코드를 생성해봤습니다
코드
코드를 설명하자면
중요한 코드만 설명드리겠습니다. 1)
inta=scan.nextInt();
int[]products=newint[a];
이 코드는 사용자로부터 정수를 입력받고 ,,
그 숫자의 크기를 가진 배열을 생성합니다.
2)
inti=0;
while(i<products.length){
System.out.print("학생["+(i+1)+"] 의 점수 : ");
intgrade=scan.nextInt();
products[i]=grade;
i++;
}
while문으로 배열의 크기만큼만 반복이되게 설정 후
0부터 (n-1)까지 존재하는 index에 값을 입력받아 대입.
0번 인덱스에 대입 후 i++을 통해
다음 루프에는 1번인덱스에 대입하게 된다. (n-1)까지 반복
3)
intsum=0;
for(intb:products){
sum+=b;
}
향상for문을 이용해 b(products 배열의 각 값) 을
전역변수인 sum에 누적.
4) 총 점수와 평균정도는 구할 수 있을것이라 생각해요!!!!! 설명은 PASS
5)
System.out.printf("** 평균(%.3f) 이상의 학생 ** \n",avg);