⦁ 배열이란?
같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
저장공간이 연속적으로 붙어있음
⦁ 배열의 선언과 생성
배열의 선언 – 배열을 다루기 위한 참조변수의 선언
선언 방법 : 타입[] 변수이름; // 배열을 선언
변수이름 = new 타입[길이]; // 배열을 생성
int[] score; // int 타입의 배열을 다루기 위한 참조변수 score선언
score = new int[5]; // int 타입의 값 5개를 저장할 수 있는 배열 생성
⦁ 배열의 index
각 요소에 자동으로 붙는 일련번호
index의 범위는 0부터 ‘배열길이-1’ 까지
int score = new int[5];
score[3] = 100; // 배열 score의 4번째 요소에 100을 저장한다.
int value = score[3]; // 배열 score의 4번째 요소의 값을 읽어서 value에 저장.
⦁ 배열의 길이
배열이름.length – 배열의 길이(int형 상수)
int[] arr = new int[5]; // 길이가 5인 int배열
int tmp = arr.length; // arr.length의 값은 5이고 tmp에 5가 저장된다.
배열은 한 번 생성하면 그 길이를 바꿀 수 없다.
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); // 문자열 str의 4번째 문자(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]; // 4행 3열의 2차원 배열 score를 생성
score[0][0] = 100; // 배열 score의 1행1열에 100을 저장
System.out.println(score[0][0]); // 배열 score의 1행 1열의 값을 출력
⦁ 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));
}
}
출처 - 유튜브 남궁성의 정석코딩 [자바의 정석 - 기초편]
'Java > Java의 정석' 카테고리의 다른 글
220307 Java - Chapter 6. 객체지향 개념I Part. 2 (0) | 2022.03.07 |
---|---|
220305 Java - Chapter 6. 객체지향 개념I Part.1 (0) | 2022.03.05 |
220303 Java - Chapter 4. 조건문 (0) | 2022.03.03 |
220302 Java - Chapter 3. 연산자(Operator) (0) | 2022.03.02 |
220301 Java - Chapter 2. 변수 (0) | 2022.03.01 |