자바의정석 5장

서현우·2022년 3월 12일
0

자바의정석

목록 보기
5/22

5장 배열

배열이란?

"배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것"
int[ ] score = new int[5];

배열의 선언과 생성

배열의 선언

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

선언방법

  1. 타입[ ] 변수이름; //Java
    int[ ] score;
    String[ ] name;

  2. 타입 변수이름[ ]; //C언어
    int score[ ];
    String name[ ];

배열의 생성

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

배열의 인덱스

  • 각 요소(저장공간)에 자동으로 붙는 (일련)번호.
  • "인덱스(index)의 범위는 0부터 '배열길이-1'까지"
  • int[ ] score = new int[5]; //길이가 5인 int 배열
//배열의 인덱스
int[] score;  //배열 score를 선언(참조변수)
score = new int[5]; // 배열의 생성(int저장공간 x 5)

int[] score = new int[5];  //한 줄로

배열의 길이

  • 배열이름.length - 배열의 길이(int형 상수)
  • "배열은 한번 생성하면 '실행하는 동안' 그 길이를 바꿀 수 없다."
int[] arr = new int[5]; //길이가 5인 int 배열
int tmp = arr.length; //arr.length의 값은 5이고 tmp에 5가 저장된다.

//배열의 모든 요소 출력
int[] score = new int[6];
for(int i = 0; i < score.length; i++)
	System.out.println(score[i]);

배열의 초기화

배열의 각 요소에 처음으로 값을 저장하는 것.
배열은 0으로 자동 초기화 됨.

int[] score = { 50, 60, 70, 80, 90 }; //선언과 초기화를 한줄로 하는 경우

배열의 출력

int[] iArr = { 100, 95, 80, 70, 60 };
System.out.println(iArr); //에러. 다른 값이 출력됨

//int배열 출력 1번 방법
for(int i=0; i<iArr.length; i++) {  //배열의 요소를 순서대로 하나씩 출력
	System.out.println(iArr[i]);
}

//int배열 출력 2번 방법
System.out.println(Arrays.toString(iArr));

//문자는 바로 출력 가능
char[] chArr = { 'a', 'b', 'c', 'd' };
System.out.println(chArr); //OK. abcd가 출력
System.out.println(Arrays.toString(chArr)); //OK.

배열의 활용

총합과 평균 : 배열의 모든 요소를 더해서 총합과 평균을 구한다.
--예제5--

최대값과 최소값 : 배열의 요소 중에서 제일 큰 값과 제일 작은 값을 찾는다.
--예제5--

섞기(Shuffle) 배열의 요소의 순서를 반복해서 바꾼다.(숫자 섞기, 로또 번호 생성)
--예제 5-4--
--예제 5-5--

String배열의 선언과 생성

String[] name = new String[3]; //3개의 문자열을 담을 수 있는 배열을 생성한다.

//[예제5-6]
String[] name = { "Kim", "Park", "Yi" };

String[] strArr = {"가위", "바위", "보"};
System.out.println(Arrays.toString(strArr));

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

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

커맨드 라인에 입력한 값이 문자열 배열에 담겨서 전달된다.

2차원 배열

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

int[][] score = new int[4][3]; //4행 3열의 2차원 배열을 생선한다.

//2차원 배열의 인덱스
int[][]score = new int[4][3]; 

//2차원 배열의 초기화
int[][] arr = { {1, 2, 3}, {4, 5, 6} };

int[][] arr = { {1, 2, 3},  //직관적으로
	            {4, 5, 6} 
	          };

String 클래스

  1. String클래스는 char[]와 메서드(기능)를 결합한 것
    String클래스 = char[] + 메서드(기능)
  2. String클래스는, 내용을 변경할 수 없다.(read only)
    새로 만들어져서 참조하는 주소만 변경.

String클래스의 주요 메서드

String str = "ABCDE";
char ch = str.charAt(3); //문자열 str의 4번째 문자 'D'를 ch에 저장

String str = "012345";
String tmp = str.substring(1, 4); // str에서 index범위 1~4의 문자 1,2,3을 반환(4는 안들어감)
System.out.println(tmp); // "123"이 출력된다.

String str = "ABCDE";
char ch = str.charAt(4);
String str2 = str.substring(1,4);
String str3 = str.substring(1);
String str4 = str.substring(1, str.length());

Arrays로 배열 다루기

문자열의 비교와 출력 - equals(), toString()
Math 클래스 : 수학관련 메서드 모아놓음.

int[] arr = {0,1,2,3,4,};
int[][] arr2D = {{11,12}, {21,22}};

System.out.println(Arrays.toString(arr)); //[0, 1, 2, 3, 4] (1차원)
System.out.println(Arrays.deepToString(arr2D)); //[[11,12], [21,22]] (2차원 이상)

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

System.out.println(Arrays.equals(str2D, str2D2)); //false (1차원배열 비교)
System.out.println(Arrays.deepEquals(str2D, str2D2)); //true (2차원 이상 배열 비교)

배열의 복사 - 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); //(arr,from,to) arr5=[2,3], 4는 불포함
int[] arr6 = Arrays.copyOfRange(arr, 0, 7); //(arr,from,to) arr6=[0,1,2,3,4,0,0], 4는 불포함

배열의 정렬 - 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개의 댓글