ch 5_ 배열 Array
1. 배열 ("array")
배열
- 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
- 변수와 달리 배열은 각 저장공간이 연속적으로 배치되 있음
int score1, score2, score3, score4, score5;
이를 배열로 바꾸면
int[] score = new int [5]; //5개의 int 값만 저장할 수 있는 배열 생성
- 값을 저장할 수 있는 값은 score [0] ~ score[4] 모두 5개
배열의 생성
타입 [] 변수이름; //배열을 선언( 배열을 다루기 위한 참조 변수 선언)
변수이름 = new 타입 [길이] ; (실제 저장공간 생성)
int[] score ; // int 타입의 배열을 다루기 위한 참조변수 score 선언
score = new int [5]; // int 타입의 값 5개를 저장할 수 있는 배열 생성 (실제 저장공간 생성)
배열 인덱스(index)
- 생성된 각 저장공간 : 배열의 요소 (element)
- 배열 이름 [인덱스] 이란 형식으로 배열 요소에 접금함
- 인덱스(index) : 배열의 요소마다 붙여진 일련의 번호로 범위는 0부터 (배열길이-1) 까지!
int [] score = new int [5]; // 길이가 5인 int 배열
score[3]=100; //배열 score의 4번째 요소에 100저장
int value = score [3]; //배열 score의 4번째 요소의 값을 읽어서 value에 저장
배열의 길이 (배열의 이름. length)
- for문의 조건식에 배열의 길이를 직접 적어주는 것 보다 '배열 이름. length' 사용하는 것이 나음
int [] score = new int [5]; // 길이가 5인 int 배열
for (int i+0; i<score.length; i++) //조건식을 변경하지 않아도 됨
System.out.println(score[i]);
> '배열이름. length'는 배열 길이가 변경되면 자동적으로 변경된 배열의 길이를 값으로 가짐
배열의 초기화
- 배열은 생성과 동시에 자동적으로 기본값(0)으로 초기화됨으로 배열을 사용하기 전에 따로 초기화 해주지 않아도 됨
- 만약 원하는 값을 저장하려면 각 요소마다 값 지정
int [ ] score = new int [5]; //길이가 5인 int형 배열 생성
score [0] = 50; // 각 요소에 직접 값을 저장함
score [1] = 60;
score [2] = 70;
score [3] = 80;
score [4] = 90;
- 자바에선 다음과 같이 배열을 간단하게 초기화가 가능
- 저장할 값을 괄호 { } 안에 쉼표로 구분해 나열
괄호 { } 안의 값의 개수에 의해 배열의 길이는 자동으로 결정됨으로 괄호 [ ] 안에 배열의 길이는 안 적어도 됨
int [ ] score = new int [ ] { 50,60,70,80,90} ; //배열의 생성과 초기화를 동시에!
int [ ] score = { 50,60,70,80,90} // new int [ ] 생략 가능
배열의 출력
- 'Arrays.toString (배열이름) 메소드 사용
- 배열의 모든 요소를 [첫번째,. 두번쨰 .. ] 와 같은 형식의 문자열로 만들어 반환함
- import java.util.Arrays; 추가 필요
int [ ]iArr = {100,98,80,70,60};
//배열 iArr의 모든 요소를 출력함. [100,95,80,70,60] 이 출렫됨
System.out.prinln(Arrays.toString(iArr);
2. String
Sting 배열 생성
-
int 배열 선언과 생성 동일
-
String [ ] name = new String[3] ; 3개의 문자열을 담을 수 잇는 배열 생성
- 3개의 String 타입의 참조변수를 저장하기 위한 공간이 마련됨
- 참조형 변수의 기본값 = Null
- 각 요소의 값은 Null로 초기화 된다
<변수의 타입에 따른 기본값>
int score1, score2, score3, score4, score5;
이를 배열로 바꾸면
int[] score = new int [5]; //5개의 int 값만 저장할 수 있는 배열 생성
- 값을 저장할 수 있는 값은 score [0] ~ score[4] 모두 5개
타입 [] 변수이름; //배열을 선언( 배열을 다루기 위한 참조 변수 선언)
변수이름 = new 타입 [길이] ; (실제 저장공간 생성)
int[] score ; // int 타입의 배열을 다루기 위한 참조변수 score 선언
score = new int [5]; // int 타입의 값 5개를 저장할 수 있는 배열 생성 (실제 저장공간 생성)
int [] score = new int [5]; // 길이가 5인 int 배열
score[3]=100; //배열 score의 4번째 요소에 100저장
int value = score [3]; //배열 score의 4번째 요소의 값을 읽어서 value에 저장
int [] score = new int [5]; // 길이가 5인 int 배열
for (int i+0; i<score.length; i++) //조건식을 변경하지 않아도 됨
System.out.println(score[i]);
> '배열이름. length'는 배열 길이가 변경되면 자동적으로 변경된 배열의 길이를 값으로 가짐
int [ ] score = new int [5]; //길이가 5인 int형 배열 생성
score [0] = 50; // 각 요소에 직접 값을 저장함
score [1] = 60;
score [2] = 70;
score [3] = 80;
score [4] = 90;
- 저장할 값을 괄호 { } 안에 쉼표로 구분해 나열
괄호 { } 안의 값의 개수에 의해 배열의 길이는 자동으로 결정됨으로 괄호 [ ] 안에 배열의 길이는 안 적어도 됨int [ ] score = new int [ ] { 50,60,70,80,90} ; //배열의 생성과 초기화를 동시에! int [ ] score = { 50,60,70,80,90} // new int [ ] 생략 가능
- 배열의 모든 요소를 [첫번째,. 두번쨰 .. ] 와 같은 형식의 문자열로 만들어 반환함
- import java.util.Arrays; 추가 필요
int [ ]iArr = {100,98,80,70,60};
//배열 iArr의 모든 요소를 출력함. [100,95,80,70,60] 이 출렫됨
System.out.prinln(Arrays.toString(iArr);
Sting 배열 생성
-
int 배열 선언과 생성 동일
-
String [ ] name = new String[3] ; 3개의 문자열을 담을 수 잇는 배열 생성
- 3개의 String 타입의 참조변수를 저장하기 위한 공간이 마련됨
- 참조형 변수의 기본값 = Null
- 각 요소의 값은 Null로 초기화 된다
<변수의 타입에 따른 기본값>
자료형 | 기본값 |
---|---|
boolean | false |
char | '\u0000' |
byte,short,int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d 또는 0.0 |
참조형 | null |
String 배열 초기화
- 괄호{}을 사용해 초기화 하기
String [] name = new String[] {"Kim","Park","Yi"};
String [] name = {"Kim","Park","Yi"}; // new String[] 생략 가능
- 각 요소에 문자열 저장해서 초기화 하기
String [] name = new String [3];
name[0]=new String("Kim");
name[1]=new String("Park");
name[2]=new String("Yi");
- 예외적으로 String 클래스 만 큰 따음표 " 만으로 간단하게 표현 허용
String [] name = new String [3];
name[0]="Kim";
name[1]="Park";
name[2]="Yi";
String 클래스
-
char 배열 : 문자배열 , 문자를 연이어 늘어 놓은 것
-
String 배열 = char 배열 + 기능(메서드)
-
c에선 문자열을 char로 다루지만 객체지향언어인 java에선 char 배열과 그에 해당되는 기능을 함께 묶어서 클래스로 정의함
-
객체지향개념이 나오기 이전의 언어들은 데이터와 기능을 따로 다뤘지만 객체지향언어에선 데이터와 그에 관련된 기능을 하나의 클래스에 뭈어서 다룰 수 있게 함
-
즉 서로 관련된 것들끼리 데이터와 기능을 구분하지 않고 함께 묶는다
기능 = 함수 = 메서드 in java
메서드 : 객체지향언어에서 '함수'대신 사용하는 용어로 함수와 동일
- String 객체(문자열)은 읽을 수 만 있고 내용변경은 불가능
String str = "JAVA";
str= str+8 // "java8"이라는 새로운 문자열 str에 저장됨
System.out.println(str);
해당 문장은 문자열str의 내용이 변경되는 것 같지만 문자열은 변경할 수 없음으로 새로운 문자열이 생성된다
변경가능한 문자열을 다루려면, StringBuffer 클래스 사용하면 됨
String 주요 메서드
메서드 | 설명 |
---|---|
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[])로 변환해서 반환 |
-
charAt 메소드 : 문자열에서 지정된 index에 있는 한 문자 반환
-
substring() : 문자열 일부 뽑아냄
-
equals() : 문자열의 내용이 같은지 다른지 확인
- equalsIhnoreCase() : 대소문자 구분 안하고 비교3. 커멘트 라인을 통해 입력받기
-
nextLine() 외에도 화면을 통해 입력 받기 가능
-
프로그램 실행시 클래스 이름 뒤에 공백문자로 구분해서 여러 개의 문자열을 프로그램에 전달 가능
c:\jdk1.8\work\ch5>java MainTest abc 1233
-
실행 프로그램의 main메서드가 담긴 클래스 이름이 MainTest라고 가정할떄 다음과 같이 실행 가능
-
커맨드 라인에 입력된 매개변수는 공백문자로 구분하기 때문에 입력될 값에 공백이 있는 경우 큰따음펴(")로 감싸줘야 함
-
커맨드 라인에서 숫자를 입력해도 숫자가 아닌 문자열로 처리되는 것을 주의
-
커맨드 라인에 매개변수를 입력하지 않으면 크기 =0 인 배열 생성되어 args.length=0 이 됨
3.2 이클립스에서 커맨드 라인 매개변수 입력하기4. 2차원 배열(matrix)
2차원 배열(matrix)
-
다차원 배열(multi-dimensional)
-
2차원 배열 선언 방법 ( 대괄호 []만 하나 더 추가됨)
- 3차원 이상의 고차원 배열은 대괄호 개수를 차원의 수만큼 추가해 주면 됨선언방법 선언 예 타입[ ][ ]변수 이름; int[ ][ ] score; 타입 변수 이름[ ][]; int score[ ][ ]; 타입[ ]변수 이름[ ]; int[ ] score; ex) int [ ][ ] score = new int [4][3] ; //4행 3열의 2차원 배열 생성함
2차원 배열의 인덱스
-
2차원 배열 : 행 (row), 열(column) 로 구성
-
2차원 배열 요소 접근 : "배열이름 [행][열]
2차원 배열 초기화
int [ ] [ ] arr = new int [ ] [ ] {1,2,3},{4,5,6}}; int [ ] [ ] arr = {{1,2,3},{4,5,6}}; //new int [][] 생략됨
-
행열로 줄바꿈 해주는 것이 좋음
int [ ] [ ] arr = { {1,2,3}, {4,5,6} };
### Array로 배열 다루기 ###
#### 1. 배열의 비교와 출력 equals(), toString() ####
-*** toString()***
- 배열의 모든 요소를 문자열로 편하게 출력 가능
- 일차원 배열에만 사용가능함으로 다차원 배열은 deepToString() 사용
- deepToString()은 배열의 모든 요소를 재귀적으로 접근해 문자열을 구성함으로 2차원 뿐만 아니라 3차원 배열에도 동작함
- equals()도 1차원 배열만 사용 가능함으로 다차원 배열은 deepEquals()사용
#### 2. 배열의 복사 - copyof() ,copyOfRange()####
- copyof()은 배열 전체, copyOfRange()은 배열 일부를 복사해 새로운 배열 만들어 반환함
- copyOfRange() 의 지정된 범위의 끝은 포함되지 않음
#### 3. 배열의 정렬 - sort()####
```java
int [ ] arr = {3,2,0,1,4};
Arrays.sort(arr); // 배열 arr 을 정렬함
System.out.print;n(Array.toString(arr));//[0,1,2,3,4]
Author And Source
이 문제에 관하여(ch 5_ 배열 Array), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@zaqqum01/ch-5-배열-Array저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)