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]의 승리" 출력
'Programming > Java \ Spring' 카테고리의 다른 글
🔥자바스터디🔥 배열과 반복문을 이용한 BINGO 만들기 (0) | 2021.05.30 |
---|---|
🔥자바스터디🔥 자바의 정석 CH6 객체지향 프로그래밍(클래스, 메소드, 오버로딩, 생성자) (0) | 2021.05.30 |
🔥자바스터디🔥 자바의 정석 CH4 조건문과 반복문(if, switch, for, while) (0) | 2021.05.23 |
🔥자바스터디🔥 instanceof / 화살표(->) 연산자 / (optional) Java 13. switch 연산자 (0) | 2021.05.23 |
🔥자바스터디🔥 자바의 정석 CH3 연산자(단항, 산술, 비교, 논리 등) (0) | 2021.05.23 |