Programming/Java \ Spring

🔥자바스터디🔥 자바의 정석 CH5 배열(Array)

1. 배열(Array)

       - 배열(Array)이란 선형 자료구조(Data Structure)중 하나로, 

         동일한 타입의 연관된 데이터를 메모리에 연속적으로 저장하여 하나의 변수에 묶어서 관리하기 위한 자료 구조이다.
       - 배열의 길이는 최초 선언한 값으로 고정되며 위와 같이 인덱스(Index)를 통해 데이터에 접근 할 수 있다.

 

1.2 배열의 선언

타입[] 변수이름; 
int[] score;

타입 변수이름[]; 
int score[];

1.3 배열의 생성

         - 배열을 선언하면 생성된 배열을 담기 위한 참조변수를 위한 공간이 만들어 진다.

           데이터를 배열에 저장하여 활용하려면 배열을 생성해야한다. (저장될 공간 생성)

         - 연산자 new 와 함께 배열의 타입과 크기를 지정해주어야한다. (길이 0도 가능)

int[] score;
score = new int[5];

int[] score = new int[5];

1.4 배열의 초기화

         - 생성과 동시에 변수 타입의 기본값으로 초기화된다.

         - 원하는 값으로 초기화할 경우 대입연산자를 이용하여 해당 인덱스에 값을 넣어준다.

            ex) scroe[0] = 86; 

         - 선언과 초기화를 따로 진행할 경우 new 연산자를 통해 저장할 공간(객체 생성)을 해야한다.

//생성과 동시에 초기화
int[] score = {100, 90, 80};
int[] score = new int[]{100, 90, 80};

1.5 배열의 활용

         - 배열에 저장하거나 저장된 값을 읽어오기 위해서는 배열 변수와 인덱스를 사용한다.

         - 인덱스는 0부터 시작한다.

// 배열 score의 4번째 요서(인덱스 3)에 100 저장
score[3] = 100;
// 배열 score의 4번째 요소에 저장된 값을 변수 value에 저장
int value = score[3];

// .length : 배열의 길이를 int타입으로 반환
score.length

** 버블정렬 알고리즘

   배열의 크기가 n일때, 배열의 첫번째부터 n-1까지의 요소에 대해, 근접한 값과 크기를 비교하여 자리바꿈을 반복

** Arrays.toString(배열이름)

   배열의 모든 요소를 '[첫번째요소, 두번째 요소, ....]' 과 같은 형식의 문자열로 반환

package test;

public class ArrayTest1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] number = new int[10];
		int[] counter = new int[10];
		
		for(int i=0; i < number.length; i++) {
			System.out.print(number[i] = (int)(Math.random() * 10));
		}
		System.out.println();
		for(int i=0; i < number.length; i++) {
			counter[number[i]]++;
			System.out.print("넘버 "+ number[i]);
			System.out.println();

			System.out.print("카운터 "+ counter[number[i]]);
			System.out.println();

		}
		System.out.println();
		
		for(int i=0; i < number.length; i++) {
			System.out.println(i + "의 개수 :" + counter[i]);
		}
		
		
	}

}
더보기

//결과 (실행시마다 달라짐)

3036377344
넘버 3
카운터 1
넘버 0
카운터 1
넘버 3
카운터 2
넘버 6
카운터 1
넘버 3
카운터 3
넘버 7
카운터 1
넘버 7
카운터 2
넘버 3
카운터 4
넘버 4
카운터 1
넘버 4
카운터 2

0의 개수 :1
1의 개수 :0
2의 개수 :0
3의 개수 :4
4의 개수 :2
5의 개수 :0
6의 개수 :1
7의 개수 :2
8의 개수 :0
9의 개수 :0

 

배열에 증감연산자를 적용하면 어떻게되는지 이해가 덜 된것 같아 위 예제에 print문을 추가해봤다.

 

System.out.println("카운터[0] " + counter[0]);
System.out.println("카운터[0]++ " + counter[0]++);
System.out.println("카운터[0] " + counter[0]);

 

// 결과

카운터[0] 1

카운터[0]++ 1

카운터[0] 2

 

- arr[0]을 호출하면 해당 위치에 저장된 값이 전달되고,   증감연산자가 추가되면 해당값에 증감이 된다.

 

1.6 다차원 배열

      - 배열의 배열로 구성되어 있다.

String [ ][ ] school = new String [11][30]; //한 반에 30명씩 11반까지

//배열 초기화
school[0][0] = "학생1";

//배열의 길이 (초기화 되어있다는 가정하에)
school.length; // 11
school[0].length; // 30

1.7 가변 배열

      - 다차원 배열의 형태의 구조(배열의 배열)를 이용하여 좀더 자유로운 형태로 구성

int[][] score = new int[2][];
score[0] = new int[3];
score[1] = new int[4];

1.8 배열의 복사

      - 배열은 한 번 생성하면 그 크기를 변경할수 없기 때문에, 저장공간이 보다 더 많이 필요하다면 더 큰 배열을 만들고 내용을 복사한다

      - 복사시 for문을 이용하거나 System클래스의 arraycopy()를 사용한다

      - arraycopy() : 저장되어 있는 값만 복사, 참조변수배열일 경우 주소값만 복사할 뿐 객체를 복사하지 않는다.

        (System.arraycopt(복사할배열, 복사 시작 인덱스, 저장할배열, 저장시작 인덱스, 복사할 갯수);)

 

1.9 커맨드 라인을 통해 입력받기

      - 커맨드라인을 통해 입력된 내용은 String 배열에 담겨 메인메소드의 매개변수(args)에 전달된다.

      - 커맨드라인에 입력된 매개변수는 공백문자로 구분한다. 입력될 값에 공백이 있는경우 큰따옴표로 감싸야한다.

 


2. String 배열

       - 참조형 변수의 초기값은 null 이므로 초기화를 진행하지 않을경우 null로 초기화된다.

       - null은 어떠한 객체도 가리키고 있지 않다는 뜻이다.

       - 배열 각 요소에 객체 주소가 저장된다.

 

2.1 char배열과 String 클래스

      - String클래스는 char배열에 기능(메서드)를 추가한 것이다.

     

  ** String클래스의 주요 메서드

         char charAt(int index) : 문자열에서 해당 위치(index)에 있는 문자 반환

         int length() : 문자열의 길이를 반환  

         String substring(int from, int to) : 문자열에서 해당 번위(from~to)에 있는 문자열 반환 (to는 범위에 포함되지 않음)

         boolean equals(String str) : 문자열의 내용이 같으면 true, 다르면 false 반환 (대소문자 구분함)

         char[] toCharArray() : 문자열을 문자배열(char[])로 변환해서 반환

 

  ** char배열과 String클래스의 변환 

char[] arr = {'a', 'b', 'c'};
String = new String(arr); // char[] >> String
char[] tmp = str.toCharArray(); // String >> char[]

 

더보기

빙고 코드 짜기

 

// 조건

1. 5 * 5 의 정사각형 2차원 배열

2. 모든 요소에 1 ~ 25까지의 숫자 랜덤 초기화 (콘솔에 출력금지)

3. 콘솔에 각 요소좌표 출력

    [0, 0] [0, 1] [0, 2] [0, 3] [0, 4]

    [1, 0] [1, 1] [1, 2] [1, 3] [1, 4]

    [2, 0] [2, 1] [2, 2] [2, 3] [2, 4]

    [3, 0] [3, 1] [3, 2] [3, 3] [3, 4]

    [4, 0] [4, 1] [4, 2] [4, 3] [4, 4]

4. 스캐너로 1~25까지의 숫자 입력 (내 역할 a, 상대방 b로 구분해서)

5. 입력한 숫자의 좌표를 찾아 화면에 좌표대신 숫자 출력

    입력한 숫자가 25이고 좌표의 위치가 [2, 2] 라면,

    [0, 0] [0, 1] [0, 2] [0, 3] [0, 4]

    [1, 0] [1, 1] [1, 2] [1, 3] [1, 4]

    [2, 0] [2, 1] 25 [2, 3] [2, 4]

    [3, 0] [3, 1] [3, 2] [3, 3] [3, 4]

    [4, 0] [4, 1] [4, 2] [4, 3] [4, 4]

6. 1빙고마다 "[a]님(또는 b) 빙고" 출력

7. 내차례(또는 상대방차례)에 5빙고시 "[a]의 승리" 출력