Java공부(코딩)

코딩초보의Java (자바)4일차-2 (배열)

동곤일상 2024. 12. 10. 01:33
반응형

오늘은 알바에 사람이 많이 없어 틈틈히
배열에 대해 알아보도록 하겠습니다


배열은 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)

int a = scan.nextInt();

int[] products = new int[a];

이 코드는  사용자로부터 정수를 입력받고 ,,

그 숫자의 크기를 가진 배열을 생성합니다.

2)

int i =0;

while(i < products.length) {

System.out.print("학생["+(i+1)+"] 의 점수 : ");

int grade = scan.nextInt();

products[i] = grade;

i++;

}

while문으로 배열의 크기만큼만 반복이되게 설정 후

0부터 (n-1)까지 존재하는  index에 값을 입력받아 대입.

0번 인덱스에 대입 후 i++을 통해

다음 루프에는 1번인덱스에 대입하게 된다. (n-1)까지 반복

3)

int sum=0;

for (int b : products) {

sum+=b;

}

향상for문을 이용해 b(products 배열의 각 값) 을

전역변수인 sum에 누적.

4)
총 점수와  평균정도는 구할 수  있을것이라 생각해요!!!!! 설명은 PASS
 
5)

System.out.printf("** 평균(%.3f) 이상의 학생 ** \n",avg);

for (int num=0; num<products.length; num++) {

if(products[num] > avg) {

System.out.print("학생["+(num+1)+"] : "+products[num]+" ");

}

}

평균을 구한 후 0번인덱스부터 배열의크기까지의 값을 for문을 이용해

평균값과보다 큰 값만 출력하게 합니다.

 

 
출력 화면 (printf 활용해 소수점 3자리까지만 출력)

 


3-1) 최대 ,최솟값 찾기  

for문+알고리즘을 적극활용해서 최대값 , 최솟값을 배열에서 찾아보았어요.

출력예시

 
 


3-2) 심화 예제

String 배열을 사용해서  과목배열을 만든 후
학생의 수를 입력받고
과목별 점수(수학 , 영어, 국어)를 입력 후
각 학생의 평균점수를 나타내봤습니다

출력예시

궁금한게 있으시면 댓글 남겨주세요~~~!!!
많이 부족하지만 봐주셔서 감사합니다