본문 바로가기

학원/JAVA - 학원

배열

728x90

배열이란

- 배열은 연관된 정보를 그룹핑 하는데 사용된다.

- 배열은 같은 타입의 변수들의 모임이다.

ex) int a = 3 과 같은 변수들이 여러개 모인 것이 배열이다.

즉, 변수가 하나의 데이터를 지정한다면 배열은 여러개의 데이터를 담기 위한 것이다.

 

배열의 기본 형태는 아래와 같다.

String[] classGroup = {"김군", "권군", "최군"}

이런 식으로 만약 문자열 타입의 배열이라면 String뒤에 대괄호를 넣고, 변수명을 선어하고, 문자열 상수들은 중괄호로 묶는다.

위의 경우는 classGroup라는 문자열 타입의 배열은 크기가 3인 배열이며, 또 다른 방식으로 표현할 수 있다.

String classGroup = new String[3]

의 형태로 표현하면 위와 마찬가지로 크기가 3인 String타입의 배열이 선언된 것이다.

 

배열을 사용하면서 원하는 데이터(원소)만 출력할 때에는 인덱스를 사용해서 불러오며, 인덱스 번호 시작은 0부터다.

 

배열을 사용한 코드와 변수사용 코드의 비교

배열의 특징

- 배열은 모두 같은 타입으로 묶임(정수형 배열에는 정수값만, 실수형 배열에는 실수값만)

 

배열의 생성

1. 초기값 설정을 통한 생성

int[]a = {1, 2, 3, 4};

 

2. 길이 지정을 통한 생성

int[]a=new int[3];

- 길이 지정 배열은 타입에 따라 초기값이 결정된다.(0 / 0.0 / false / null)

 

 

1. 배열의 선언

2. 배열의 생성(배열 선언 후 생성 / 생성과 사이즈 지정 동시에)

3. 배열의 생성과 초기값 부여

4. 오류(배열을 생성하지 않고 바로 값을 넣음)

 

레퍼런스 치환과 배열 공유

 

- intArray가 5크기의 배열을 생성했고, myArray에 inArray를 대입하면 my는 그 공간을 가리키게 됨

- 즉, 같은 곳을 가리키며, 따라서 intArray에 2를 넣어도 myArray에 6을 넣으면 같은 공간을 차지하기 때문에 6으로 바뀐다.

 

<예제>

 

<예제>

 

 

final int로 입력할 수를 정해도 되고, 그냥 배열 사이즈를 5로 지정해서 마지막 출력문에 s 대신 5를 넣어도 된다.

 

<문제>@

 

최소값을 구할 때 나는 주어진 범위 내에서 가장 큰 수를 min의 초기값으로 주고 시작하는데 여기선 주어지지 않았기 때문에 임의로 100을 주고 시작했다.

 

위의 방법으로도 구할 수 있다.

이 방법은 초기상태인 i가 0일때 처음 입력하는 수가 min에 들어가도록 하는 방식이다.

처음 상태에서만 이 if문 조건식을 사용해서 값을 집어넣고 그 이후에는 else문과 그 뒤의 if문으로 최소값을 구한다.

 

<문제>@

 

내가 최소값 구할 때는 최소의 초기값을 크게 줬었다.

하지만 그럴 경우 더 큰 수가 입력되었을 때 먹통이 될 위험이 생긴다.

그럴 때를 대비해서 나와 같은 방식으로 코드를 짤 때 사용하는 것이 Integer.MAX_VALUE;인데

이는 가장 큰 정수값을 넣어주는 것이다.

 

<문제>

 

<문제 - random사용>

내 방법
선생님 방법

 

 

메소드로 배열 전달하기

- 배열은 메소드의 입력변수로 전달될 수도 있다.

 

- average메소드 안에 배열 points를 넣는다.(대괄호는 빼야 함.)

- static 다음의 int는 리턴 타입으로 다른데로 넘길 때의 데이터 타입을 뜻한다.

 

<예제 - 메소드를 사용한 계산>

event의 요소를 통해 계산하여 리턴받은 sum값을 eventSum에 대입하고, primes 역시 동일한 과정을 거친다.

 

문자 타입과 배열

 

- 문자열은 toCharArray() 메소드를 통해 문자의 배열로 바뀔 수 있음

 

<예제 - count사용>

이 방법으로 정수에서 사용된 숫자들의 갯수를 구하는 식도 응용 가능할 듯.

- 해봤는데 정수를 문자열 - 문자로 바꿔야 하는데 어케해야할 지 모르겠음

 

2차원 배열

- 일차원 배열을 묶어 새로운 배열을 이루는 형태

<예제>

출력 : 2 X 7 = 14

 

2차원 배열 생성

1. 선언

2. 생성

3. 선언, 생성, 초기값 설정(저 위에선 3행(length) 3열이라고 볼 수 있음)

 

2차원 배열 모양과 length 필드

 

- i의 length는 2

- 0과 1의 length는 5

 

<예제 - 4년제 대학교의 1, 2학기 전체 평점평균(총 8학기)>

 

score[0]은 score의 0번째 행의 열을 가르키는 것이기 때문에 2가 나오는 것.

score : 4 - 4행이기 때문

year : 0~3

 

<예제>

 

 

2중 for문으로 행인 i와 열인 j의 인덱스를 따로 구할 수 있도록 하고, 이를 출력문에 넣어서 같이 나오도록 한다.

한번 반복 된 이후에는 println을 통해 줄을 띄워준다.

 

<문제>

 

 

<문제>@

 

12개월이 10년이니까 총 120개월이라서 [120][5]의 2차원 배열을 만들고 시작함.

합을 구하기 이전에 먼저 i와 j가 어떤 방식의 규칙을 가지고 만들어지는지 정해줘야 함.

가장 첫 줄에 어떻게 나오는지 보면

a[0][0] = (0+1)*100+0+1;의 계산 식으로 101이 나오며, 이계 j의 for문 안에 있으므로 5번 반복된다.

 

 

3차원 배열

- 2차원 배열을 묶어 만든 배열

 

정방형 / 비정방형 배열

 

1. 가로와 세로가 같다.

2. 열이 다르다.

 

<예제 - 비정방형 배열>

 

 

 

<문제>

 

 

 

enum : 열거형 선언하기

열거형 사용하기

 

. 다음에는 필드나 메소드가 오는데 shoes.뒤에 있는 것들은 여기선 필드(괄호가 없음) (필드는 특징, 속성)

 

열거형 메소드

 

- for - each문 사용

- 위에 Type.values는 위의 타입 안에 속해있는 4가지를 반복하는 것.

 

for - each

for (자료형 변수 : 배열이름){ }

위의 형태가 for - each문의 기본 형태다.

만약 배열이 int[] number = {1, 2, 3}으로 정수형 타입에, 이름이 number이라면

for (int value : number)

위와 같은 형태로 만들어지게 되는 것이다.

위 반복문을 출력한다면 차례로 1, 2, 3이 출력될 것이다.

이 반복문은 반복이 진행되면서 변수에 첫 번째부터 마지막 원소까지 차례대로 대입되게 된다.

 

<예제>

 

각 값을 넣을 변수들을 for-each문 의 괄호 처음 칸에 넣어준다.

 

메소드에서 배열 리턴

 

아래에서 int뒤에 []는 리턴 타입으로 temp의 리턴 타입

여기서는 makeArray뒤 괄호에 매개변수가 없는 모습을 볼 수 있음

 

1. intArray는 현재 참조변수

2. makeArray메소드 생성

3. inArray와 temp는 현재 같은 곳을 바라보고 있음

4. intArray를 통해 0번과 3번 인덱스에 5와 8이 들어갔음을 알 수 있는데, 이 말은 temp에도 같은 값이 들어간 것.

 

<예제>

 

main메소드 위에 int배열의 makeArray라는 메소드를 만들어준다.

이 메소드가 가지는 값과 사이즈를 만들어 주고, 이 메소드를 main메소에서 계산할 배열 intArray에 대입한다.

makeArray 메소드를 대입받은 intArray를 출력하면 makeArray에서 지정했던 값이 출력된다.

 

<문제>

 

 

main메소드에 넣어줄 makeArray메소드를 만들어준다.

main메소드에서는 그냥 출력만 할 것이고, 출력될 배열과 계산들은 모두 makeArray메소드에 만들어준다.

1~10으로 초기화를 해라고 했으니 배열 a의 중괄호 안에 10개의 숫자를 모두 넣어주고,

인덱스 하나마다 모두 101을 더해준다. 이후 a를 리턴받는다.

main메소드에서는 위의 메소드 값을 받을 배열 intarray를 만들어주고 여기에 makeArray를 대입해준다.

이후 for문에서 모든 인덱스가 출력될 수 있도록 해준다.

 

main() 메소드

 

- main메소드를 파라미터를 사용해서 실행할 수 있음

- void는 리턴 타입인데 리턴을 하진 않음

- public는 접근 지정자로 접근에 제한이 없음

- static는 객체를 생성하지 않고 사용할 수 있는 메소드를 말함

 

main(string[] args) 메소드의 인자 전달

 

이클립스에서 인자 전달

 

<예제>

 

인자 값들을 더해서 110.6이 출력

Arguments에 인자값 안넣었을 때는 0.0 출력

 

 

728x90

'학원 > JAVA - 학원' 카테고리의 다른 글

클래스와 객체  (0) 2022.02.07
예외 처리(Exception)  (0) 2022.02.04
반복문(loop), 분기문  (0) 2022.01.24
조건문  (0) 2022.01.21
메소드  (0) 2022.01.21