Hyun's Wonderwall

[백엔드] 스터디 2주차 - Java (4) 배열, 버블 정렬, Arrays 클래스, Random 클래스 본문

Study/Java, Spring

[백엔드] 스터디 2주차 - Java (4) 배열, 버블 정렬, Arrays 클래스, Random 클래스

Hyun_! 2023. 4. 3. 18:34

공부에 사용한 자료

객체지향 프로그래밍 과목 수업자료

[Chapter 03] 자바 기본 프로그래밍 (2) 배열


배열(array)

-     인덱스와 인덱스에 대응하는 데이터들로 이루어진 자료 구조. (배열을 이용하면 한 번에 많은 메모리 공간 할당 가능.)

-     같은 타입의 데이터들이 순차적으로 저장. (인덱스를 이용하여 원소 데이터 접근. 반복문 이용해 처리하기에 적합)

-     배열 인덱스: 0부터 시작. (인덱스는 배열의 시작 위치에서부터 데이터가 있는 상대 위치)

 

(1) 1차원 배열

배열 선언과 배열 생성의 두 단계 필요

-     선언과 생성 동시에: int [] array = new int[10];

-     선언과 함께 초기화: int [] array = {0, 1, 2};

-     <주의> 잘못된 배열 선언 예) int array[3]; //컴파일 오류. 선언 시 배열의 크기를 지정하면 안 된다.

 

레퍼런스 변수와 배열

 

배열 인덱스와 원소 접근

-     배열 원소 접근: 배열 변수명과 []사이에 원소의 인덱스를 적어 접근

-     배열 인덱스의 범위: 0에서 시작 ~ (배열 크기 -1)까지

-     <주의> 반드시 배열 생성후 접근하기

 

+) 레퍼런스 치환과 배열 공유: 하나의 배열을 다수의 레퍼런스가 참조 가능

 

배열의 크기, length 필드

배열은 자바에서 객체로 관리함. 배열 객체 내에 length 필드는 배열의 크기를 나타냄.

int size = array.length; //c와 달리 괄호 없음 주의

 

배열과 for-each : for (배열의 원소타입 변수 : 배열)

-     배열이나 나열의 각 원소를 순차적으로 접근하는데 유용한 for

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

for (int k : num)          //반복될 때마다 knum[0], num[1], …, num[size-1] 값으로 설정
    sum += k;

-     int[] num 뿐 아니라 String[] names, enum Week{}의 예시

enum Week{, , , , , , }

for (Week day : Week.values()) //반복될 때마다 day는 월, , …, 일로 설정

    System.out.print(day+”요일 ”);

 

 

(2) 2차원 배열

int[][] array;

int[][] array = new int[2][5];

초기화까지 진행은 int[][] array = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}};

 

2차원 배열의 구조와 length 필드

int array[][] = new int[2][5]; 있을때

array.lengthà2차원 배열의 행의 개수로서 2

array[n].lengthàn번째 행의 열의 개수로서 5

정방형 배열: 각 행의 열의 개수가 같은 배열

비정방형 배열: 각 행의 열의 개수가 다른 배열

 

int i[][];

i = new int[4][];

i[0] = new int[1];

i[1] = new int[2];

i[2] = new int[3];

i[3] = new int[4];

 

비정방형 배열의 length

i.length --> 2차원 배열의 행의 개수

i[n].length --> n번째 행의 열의 개수

ㄴ i[0].length --> 0번째 행의 열의 개수: 1

ㄴ i[1].length- -> 0번째 행의 열의 개수: 2

 

비정방형 배열의 생성과 접근

//열크기만큼 값 세팅
for (int i = 0; i < intArray.length; i++)
    for (int j = 0; j < intArray[i].length; j++)
        intArray[i][j] = (i+1)*10 + j;

//출력
for (int i = 0; i < intArray.length; i++) {
    for (int j = 0; j < intArray[i].length; j++)
        System.out.print(intArray[i][j]+" ");
    System.out.println();
}
//메소드로 분리하면 더 간편해짐

 

(3) 메소드에서 배열 리턴

- 메소드에서 만든 배열의 레퍼런스 리턴

- 메소드에서의 리턴타입: 메소드의 리턴 타입과 리턴 받는 배열 타입 일치시키기. 리턴 타입에 배열의 크기를 지정하지 않는다.

 

+ main() 메소드 보충

 자바 응용프로그램의 실행 시작 메소드.

반드시 static, public, void여야 한다.

반드시 매개 변수 타입은 문자열 배열이어야 한다(String[] args)

+) main(String[] args) 메소드의 인자 전달 방식

 

정렬과 랜덤

bubble sort

직접 두개씩 비교하여 구현가능

또는 Arrays 클래스 사용

import java.util.Arrays;하여 Arrays.sort();

+ Arrays.copyOfRange(); 메서드도 있다

 

랜덤 수 만들기

1) Math.random(); 메소드 이용

2) Random 클래스 이용
    import java.util.Random; 임포트 하고 Random r = new Random(); 해서 랜덤클래스로 r 생성