배열이란?

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

저장공간이 연속적으로 붙어있음

 

배열의 선언과 생성

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

선언 방법 : 타입[] 변수이름; // 배열을 선언

변수이름 = new 타입[길이]; // 배열을 생성

int[] score; // int 타입의 배열을 다루기 위한 참조변수 score선언

score = new int[5]; // int 타입의 값 5개를 저장할 수 있는 배열 생성

 

 

배열의 index

각 요소에 자동으로 붙는 일련번호

index의 범위는 0부터 배열길이-1’ 까지

 

int score = new int[5];

score[3] = 100; // 배열 score4번째 요소에 100을 저장한다.

int value = score[3]; // 배열 score4번째 요소의 값을 읽어서 value에 저장.

 

배열의 길이

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

int[] arr = new int[5]; // 길이가 5int배열

int tmp = arr.length; // arr.length의 값은 5이고 tmp5가 저장된다.

배열은 한 번 생성하면 그 길이를 바꿀 수 없다.

 

public class Ex5_1_tmp {

	public static void main(String[] args) {
//		int[] score;	// 1. 배열 score를 선언(참조변수)
//		score = new int[5]; // 2. 배열의 생성(int 저장공간 x5)
		
		int[] score = new int[5];	// 배열의 선언과 생성을 동시에
		score[3] = 100;
		
		for(int i=0; i<score.length; i++) {
			System.out.printf("score[%d] = %d%n" , i, score[i]);
		}
		
		int value = score[3];
		System.out.println("value = " + value);
		
	}

}

배열의 초기화

배열의 각 요소에 처음으로 값을 저장하는 것

int[] score = new int[5];

score[0] = 50; score[1] = 60; score[2] = 70;

또는

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

 

배열의 출력

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

System.out.println(iArr); // [I@14318bb와 같은 형식의 문자열이 출력된다.

 

for (int i=o; i< iArr.length; i++) { // 배열의 요소를 순서대로 하나씩 출력

System.out.println(iArr[i]);

}

 

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

// 배열 iArr의 모든 요소들을 출력한다. [100, 95, 80, 70, 60]이 출력된다.

 

ex) 배열을 출력하는 방법

import java.util.Arrays;

public class Ex5_1 {

	public static void main(String[] args) {
		int[] iArr1 = new int[10];
		int[] iArr2 = new int[10];
		int[] iArr3 = {100, 95, 80, 70, 60};
		char[] chArr = {'a', 'b', 'c', 'd'};
		
		for (int i=0; i < iArr1.length; i++) {
			iArr1[i] = i + 1; // 1~10의 숫자를 순서대로 배열에 넣는다.
		}
		for (int i=0; i < iArr2.length; i++) {
			iArr2[i] = (int)(Math.random()*10) + 1; // 1~10의 랜덤 값을 배열에 저장
		}
		
		for (int i=0; i< iArr1.length;i++) {
			System.out.print(iArr1[i]+", ");
		}
		System.out.println();
		
		System.out.println(Arrays.toString(iArr2));
		System.out.println(Arrays.toString(iArr3));
		System.out.println(Arrays.toString(chArr));
		
		System.out.println(chArr);
		
	} // main 끝

}

ex) 총합과 평균값 구하기

public class Ex5_2 {

	public static void main(String[] args) {
		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);
		
		
	}

}

ex) 최대값 최소값 구하기

public class Ex5_3 {

	public static void main(String[] args) {
		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];
			}
		} // end of for
		
		System.out.println("최대값 : " + max);
		System.out.println("최소값 : " + min);

	} // end of main

}

ex) 배열 요소의 순서 섞기

import java.util.Arrays;

public class Ex5_4 {

	public static void main(String[] args) {
		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);	// 0~9 중의 한 정수값을 임의로 얻는다.
			int tmp = numArr[0];
			numArr[0] = numArr[n];
			numArr[n] = tmp;		// numArr[0]과 numArr[n]의 값을 서로 바꾼다.
		}
		System.out.println(Arrays.toString(numArr));

	}

}

String 배열의 선언과 생성

String[] name = new String[3];

String은 참조형 이므로 기본값에 null이 들어간다.

 

ex) 가위바위보 뽑는 프로그램

import java.util.Arrays;	// ctrl + shift + o  자동으로 import문 추가

public class Practice0303 {
	
	public static void main(String[] args) {
		String[] strArr = {"가위", "바위", "보"};
		System.out.println(Arrays.toString(strArr));
		
		for(int i=0; i<10; i++) {
			int A = (int)(Math.random()*3);
			System.out.println(strArr[A]);
		}
		
	} // end main

}

ex) 로또번호 6개 뽑기

import java.util.Arrays;

public class Ex5_5 {

	public static void main(String[] args) {
		// index : 0~44
		int[] ball = new int[45];	// 45개의 정수값을 저장한다.
		
		// 배열의 각 요소에 1~45의 값을 저장한다.
		for(int i=0; i<ball.length; i++) {
			ball[i] = i+1;	// ball[0]에는 1이 저장된다.
		}
		int tmp = 0; // 두 값을 바꾸는데 사용할 임시변수
		int j = 0;	 // 임의의 값을 얻어서 저장할 변수
		
		// 배열의 i번째 요소와 임의의 요소에 저장된 값을 서로 바꿔서
		// 0번째 부터 5번째 요소까지 모두 6개만 바꾼다.
		for(int i=0; i<6; i++) {
			j = (int)(Math.random()*45); 	// 0~44 범위의 정수를 생성해서 저장한다. index의 범위.
			tmp = ball[i];
			ball[i] = ball[j];
			ball[j] = tmp;
			System.out.println(Arrays.toString(ball));
		}
		for (int i=0; i<6; i++) {
			System.out.println("ball["+i+"] = " + ball[i]);
		}

	}

}

 

String 클래스

String 클래스는 char[]와 메소드(기능)를 결합한 것

String 클래스는 내용을 변경할 수 없다.(read only)

String a = “a”; String b = “b”;

a = a+b;

System.out.println(a); // ab가 출력되지만 a에 저장된 것은 ab의 주소이지 ab가 직접 저장된 것이 아니다.

 

String 클래스의 주요 메소드

- char charAt(int index)

문자열에서 해당 위치(index)에 있는 문자를 반환한다.

String str = “ABCDE”; // char[] 이다.

char ch = str.charAt(3); // 문자열 str4번째 문자(index 3) ‘D’ch에 저장한다.

- int length()

문자열의 길이를 반환한다.

str.length(); // 문자열 str의 길이를 반환함.

 

- String substring(int from, int to)

문자열에서 해당 범위(from~to)의 문자열을 반환한다.(to는 포함 안 됨)

String str = “012345”;

String tmp = str.substring(1,4); // str에서 index범위 1~4의 문자들을 반환

System.out.println(tmp); // “123”이 출력된다.

 

- boolean equals(Object obj)

문자열의 내용이 같은지 확인한다. 같으면 true, 다르면 false

 

- char[] toCharArray()

문자열을 문자배열(char[])로 변환해서 반환한다.

import java.util.Arrays;	// ctrl + shift + o  자동으로 import문 추가

public class Practice0303 {
	
	public static void main(String[] args) {
		String str = "ABCDE";
		char ch = str.charAt(2);
		System.out.println(ch);		// C
		
		String str2 = str.substring(1,4);
		System.out.println(str2); // BCD
		
		String str3 = str.substring(1);	// index 1부터 끝까지. 
//		String str3 = str.substring(1,str.length());  // 위와 같은 표현이다.
		System.out.println(str3);	// BCDE
		
		
		
	} // end main

}

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

Run configurations를 통해서 arguments에 문자열을 입력할 수 있고

cmd를 통해 문자열을 직접 입력해서 실행시킬 수도 있다.

 
public class Ex5_7 {

	public static void main(String[] args) {
		System.out.println("매개변수의 개수:" + args.length);
		for (int i=0; i<args.length; i++) {
			System.out.println("args[" + i + "] = \""+ args[i] + "\"");
		}

	}

}

2차원 배열

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

 

2차원 배열의 인덱스

int[][] score = new int[4][3]; // 43열의 2차원 배열 score를 생성

score[0][0] = 100; // 배열 score11열에 100을 저장

System.out.println(score[0][0]); // 배열 score11열의 값을 출력

 

2차원 배열의 초기화

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

 

ex) 2차원 배열 출력하는 반복문 (외우면 좋다)

public class Ex5_8 {

	public static void main(String[] args) {
		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++) {	// score.length는 4
			for (int j=0; j<score[i].length; j++) { // score[i].length는 3
				System.out.printf("score[%d][%d]=%d%n", i, j, score[i][j]);
				
				sum += score[i][j];
			}
				
		}
		
		System.out.println("sum = " + sum);

	} // main end

}

ex) 시험 점수 결과 출력

public class Ex5_9 {

	public static void main(String[] args) {
		int[][] score = {
				{100, 100, 100},
				{20, 20, 20},
				{30, 30, 30},
				{40, 40, 40}
		};
		
		int korTotal = 0, engTotal = 0, mathTotal = 0;	// 과목별 총점
		
		System.out.println("번호 국어 영어 수학 총점 평균");
		System.out.println("============================");
		
		for(int i=0; i < score.length; i++) {
			int sum = 0;		// 개인별 총점
			float avg = 0.0f;	// 개인별 평균
			
			korTotal += score[i][0];
			engTotal += score[i][1];
			mathTotal += score[i][2];
			System.out.printf("%3d", i+1);
			
			for(int j=0; j<score[i].length; j++) {
				sum += score[i][j];
				System.out.printf("%4d", score[i][j]);
			}
			
			avg = sum / (float)(score[i].length);
			System.out.printf("%4d ", sum);
			System.out.printf("%.2f%n", avg);
			
		}
		System.out.println("============================");
		System.out.printf("총점:%d  %d  %d", korTotal, engTotal, mathTotal);
	}

}

ex) 영어 뜻 맞추는 문제

import java.util.Scanner;

public class Ex5_10 {

	public static void main(String[] args) {
		String[][] words = {
				{"chair","의자"},
				{"computer","컴퓨터"},
				{"integer","정수"}	
		};
		
		Scanner sc = new Scanner(System.in);
		
		
		for(int i=0; i<words.length;i++) {
			System.out.printf("Q%d. %s의 뜻은 무엇입니까?", i+1, words[i][0]);
			
			String tmp = sc.nextLine();
			
			if(tmp.equals(words[i][1])) {
				System.out.printf("정답입니다.%n%n");
			} else {
				System.out.printf("틀렸습니다. 정답은 %s 입니다.%n%n", words[i][1]);
			}
		} // for문의 끝
		
	} // main의 끝

}

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

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

int[][] arr2D = {{11,12}, {21,22}};

 

System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]

System.out.println(Arrays.deepToString(arr2D)); // [[11, 12], [21, 22]] 다차원 배열 출력

 

String[][] str2D = new String[][] {{“aaa”,“bbb”}, {“AAA”,“BBB”}};

String[][] str2D2 = new String[][] {{“aaa”,“bbb”}, {“AAA”,“BBB”}};

 

System.out.println(Arrays.equals(str2D, str2D2)); // false

System.out.println(Arrays.deepEquals(str2D, 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.copyOf(arr, 7); // arr4=[0,1,2,3,4,0,0]

int[] arr5 = Arrays.copyOfRange(arr, 2, 4); // arr5=[2,3] , 4는 불포함

int[] arr6 = Arrays.copyOfRange(arr, 0, 7); // arr6=[0,1,2,3,4,0,0]

 

배열의 정렬 sort()

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

Arrays.sort(arr);

System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4] 오름차순 정렬

 

ex) 활용 예제

import java.util.Arrays;

public class Ex5_ex1 {

	public static void main(String[] args) {
		int[] arr = {3,4,1,0,2};			// 1차원 배열 arr
		
		Arrays.sort(arr);	// 배열 arr을 오름차순으로 정렬
		System.out.println(Arrays.toString(arr));
		
		int[][] arr2D = {{11,12},{21,22}};  // 2차원 배열
		
		System.out.println(Arrays.toString(arr));
		System.out.println(Arrays.deepToString(arr2D));
		
		String[][] str2D = {{"aaa","bbb"},{"AAA","BBB"}};
		String[][] str2D2 = {{"aaa","bbb"},{"AAA","BBB"}};
		

		System.out.println(Arrays.deepEquals(str2D,str2D2));
		
		int[] arr2 = Arrays.copyOfRange(arr, 2, 4);
		System.out.println(Arrays.toString(arr2));
	}

}

 


 

출처 - 유튜브 남궁성의 정석코딩 [자바의 정석 - 기초편] 

+ Recent posts