chapter 5 배열

JMG·2022년 1월 12일
0

자바의 정석

목록 보기
8/13

📖 배열이란?

배열은 '같은 타입'의 여러 변수를 하나의 묶음으로 다루는 것입니다.

//배열이 없다면 변수를 전부 한개씩 선언해야한다.
int score1, score2, score3, score4, score5;

//변수 5개를 바인딩 할 수 있는 int형 배열 선언
int [] score = new int[5];

//i를 인덱스라고 불리게 된다.
//인덱스는 0부터 시작한다
score[i];

📖 배열의 선언과 생성

배열을 다루기 위한 참조변수의 선언입니다.

선언방법선언예
타입[] 변수이름;(Java)int[] score;
타입 변수이름[];(C)int score[];

타입[] 변수이름; //배열을 선언(배열을 다루기 위한 참조변수 선언)
변수이름 = new 타입[길이]; //배열을 생성(실제 저장공간을 생성)

📖 배열의 인덱스

각 요소에 자동으로 붙는 번호를 의미합니다.
인덱스의 범위는 0부터 '배열길이 - 1'까지 입니다.
각 인덱스가 붙은 저장공간을 배열의 요소라고 부릅니다.

예제)

//int[] score; //배열 score를 선언
//score = new int[5]; // 배열의 생성

int[] score = new int[5]; //배열의 선언과 생성을 동시에
score[3] = 100;

System.out.print(score[3]); //100출력

📖 배열의 길이

배열이름.length - 배열의 길이(int형 상수)

int[] arr = new int[5];
int tmp = arr.length;

📌 배열은 한번 생성하면 실행하는 동안 그 길이를 바꿀 수 없습니다.

예제)

//length를 사용하게 되면 나중에 코드를 변경할 필요가 없다.
int[] arr = new int[5];
System.out.println("arr.length=" + arr.length);

for(int i=0; i<arr.length; i++) {
	System.out.println("arr["+i+"]="+arr[i]);
}

📖 배열의 초기화

배열의 각 요소에 처음으로 값을 저장하는 것을 의미합니다.
int배열은 기본적으로 0으로 초기화됩니다.

//하나씩 저장하는 방법
int[]score = new int[5];
score[0] = 50;
score[1] = 60;
score[2] = 70;
score[3] = 80;
score[4] = 90;

방법1)
int[] score = new int[]{50, 60, 70, 80, 90};
방법2)
int[] score = {50, 60, 70, 80, 90};//new int[] 생략가능

📌 그러나 두줄로 나눠야 할때는 아래와같이 방법 2로 적용해야합니다.

int[] score;
score = new int[]{50, 60, 70, 80, 90};

📖 배열의 출력

int[] iArr = {100, 95, 80, 70, 60};

System.out.println(iArr); // 그냥 출력하게 되면 주소값이 출력된다.

방법1)
for(int i=0; i<iarr.length; i++) {
System.out.println(iArr[i]);
}
방법2)
System.out.println(Arrays.toString(iArr));

char배열은 예외이다.

예제)

int[] iArr = {100, 95, 80, 70, 60};

for(int i=0; i<iArr.length; i++) {
	System.out.println(iArr[i]);
}

📖 배열의 활용

총합과 평균
예제)

int sum = 0;
float average = 0f;

int[] score = {100, 88, 100, 100, 90};
for(int i=0; i<score.length; i++) {

	sum += score[i];
	
}

average = sum / (float)score.length; //계산타입을 float로 형변환

System.out.println("총합 : " + sum);
System.out.println("평균 : " + average);

최대값과 최소값
예제)

//배열의 요소중에서 제일 큰 값과 제일 작은 값을 찾는다.
int[] score = {79, 88, 91, 33, 100, 55, 95};

int max = score[0];
int min = score[0];

for(int i=1; i<score.length; i++) {
	if(score[i] > max) {
		max = score[i];
	} else if(score[i] < min) {
	min = score[i];
	}
}

System.out.println("최대값 : " + max);
System.out.println("최소값 : " + min);

배열 섞기
예제)

//숫자섞기
int[] numArr = {0,1,2,3,4,5,6,7,8,9};

System.out.println(Arrays.toString(numArr));

for(int i=0; i<100; i++) {
	int n = (int)(Math.random() * 10);
	int tmp = numArr[0];
	numArr[0] = numArr[n];
	numArr[n] = tmp;

}

System.out.println(Arrays.toString(numArr));

📖 String배열의 선언과 생성

String[] name = new String[3]; // 3개의 문자열을 담을 수 있는 배열을 생성한다.
참조형(객체)배열은 기본적으로 null로 채워집니다.

선언방법)
String[] name = {"Kim", "Park", "Yi"};

예제)

//가위바위보 랜덤으로 출력하기
String[] strArr = {"가위", "바위", "보"}

for(int i=0; i<10; i++){
	int tmp = (int)(Math.random() * 3);
	System.out.println(strArr[tmp]);
}

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

main함수의 파라미터인 args 문자열 배열에 값을 입력하여 이용할 수 있습니다.
예제)

class Ex5_7 {
	public static void main(String[] args) {
	
		for(int i=0; i<args.length; i++) {
			System.out.println("args["+i+"]="+args[i]);
		}

	}
}

📖 2차원배열

테이블 형태의 데이터를 저장하기 위한 배열입니다.

int[][] score = new int[4][3];

//위 배열은 아래와 같이 정렬됩니다.
score[0][0] score[0][1] score[0][2] score[0][3]
score[1][0] score[1][1] score[1][2] score[1][3]
score[2][0] score[2][1] score[2][2] score[2][3]

📖 2차원 배열의 초기화

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

2차원 배열의 예제

예제)

//2차원 배열의 모든값 더하기
int[][] score = {
	{100, 100, 100},
	{20, 20, 20},
	{30, 30, 30),
	{40, 40, 40}
	};

int sum = 0;

for(int i=0; i<score.length; i++) {
	for(int j=0; j<score[i].length; j++) {
		sum += score[i][j];
	}
}

System.out.println("sum : "+ sum);

📖 String 클래스

  1. String 클래스는 char[]와 메서드(기능)을 결합한 것입니다.
  2. String 클래스는 내용을 변경할 수 없습니다.(read only)
    (메모리상으로 새로 대입하면 완전 새로운 메모리주소로 저장된다)
메서드설명
char charAt(int index)문자열에서 해당위치(index)에 있는 문자를 반환한다.
int length()문자열의 길이를 반환한다.
String substring(int from, int to)문자열에서 해당범위(from~to)의 문자열을 반환한다.(to는 포함안됨)
boolean equals(Object obj)문자열의 내용이 같은지 확인한다. 같으면 결과는 true, 다르면 false
char[] toCharArray()문자열을 문자열배열(char[])로 변환해서 반환한다.

예제)

String str = "ABCDE";

char ch = str.charAt(3); //'D' 저장
String str2 = str.substring(1, 4); //"BCD" 저장
//str.substring(1); //B부터 문자열 끝까지 저장된다

📖 Arrays클래스로 배열 다루기

📌 배열의 비교와 출력 - equals(), toString()

int[] arr = {0, 1, 2, 3, 4};
int[][] arr2D = {{1, 2}, {3, 4}};

//1차원배열
System.out.println(Arrays.toString(arr)); //[0, 1, 2, 3, 4]
//다차원배열
System.out.println(Arrays.deepToString(arr2D)); //[[1, 2], [3, 4]]

String[][] str2D1 = {{"aaa", "bbb"}, {"AAA", "BBB"}};
String[][] str2D2 = {{"aaa", "bbb"}, {"AAA", "BBB"}};

//1차원 문자열 배열비교
System.our.println(Arrays.equals(str2D1, str2D2)); //false
//다차원 문자열 배열비교
System.our.println(Arrays.deepEquals(str2D1, str2D2)); //true

📌 배열의 복사 - copyOf(), copyOfRange()

int arr = {0,1,2,3,4};
int arr2 = Arrays.copyOf(arr, arr.length); //arr2 == [0,1,2,3,4]
int arr3 = Arrays.copyOf(arr, 3); //arr3 == [0,1,2]
int arr4 = Arrays.copyOfRange(arr, 2, 4); // arr4 == [2,3] 4는 불포함
//만약에 끝값을 대상배열의 길이보다 높게 적는다면 남는 공간은 0으로 채워진다.

📌 배열의 정렬 - sort()

int[] arr = {3,2,0,1,4};
Arrays.sort(arr); //배열 arr을 정렬한다.
System.out.println(Arrays.toString(arr); //[0,1,2,3,4]
profile
초보개발 블로그입니다~

0개의 댓글