배열 ? 동일한 자료형을 묶어 저장하는 참조 자료형
생성할 때 크기를 지정해야 하고 한번 크기를 지정하면 절대 변경할 수 없는 특징이 있다.
배열 선언
자료형[ ] 변수명 | 자료형 변수명[ ] |
int[ ] a; double[ ] b; String[ ] c; |
int a[ ] ; double b[ ]; String c[ ]; |
ex) int[ ] a; // int 자료형만 저장가능
public class Array_Ex01 {
public static void main(String[] args) {
//배열의 선언방법
int a[];
double b[];
String c[];
// 실제 객체를 생성하기 위해서 new
// new int[3];
// new String[5];
// new double[]; // 객체의 크기를 지정하지 않으면 오류 발생
// 배열 자료형 변수에 객체 대입하기
int[] aa = new int[3];
aa[0] = 3;
aa[1] = 4;
aa[2] = 5;
System.out.println(aa[0]);
System.out.println(aa[2]);
// System.out.println(aa[-1]); // ArrayIndexOutOfBoundsException 발생
// 참조 변수와 배열 객체의 값 초기화하기
int aaa; // 기본 자료형
int[] bbb; // 참조 자료형
// System.out.println(aaa); // 오류 발생
// System.out.println(bbb); // 오류 발생
// 모든 변수는 초기화 이후에만 출력 가능!!!!
int aaaa = 0;
int[] bbbb = null;
System.out.println(aaaa); // 0
System.out.println(bbbb); // null
}
}
1차원 배열의 원소 값 대입의 3가지 방법
public class Array_Ex02 {
public static void main(String[] args) {
// 배열의 값 대입 방법 1
int[] array1 = new int[3]; // 배열의 선언방식 1
array1[0] = 3;
array1[1] = 4;
array1[2] = 5;
System.out.println("array1 : "+ array1[0] + " " + array1[1]+ " " + array1[2]);
int[] array2; // 배열의 선언방식 2
array2 = new int[3];
array2[0] = 3;
array2[1] = 4;
array2[2] = 5;
System.out.println("array2 : "+ array2[0] + " " + array2[1]+ " " + array2[2]);
// 배열의 값 대입 방법 2
int[] array3 = new int[]{3,4,5}; // 강제초기화 생략
System.out.println("array3 : "+array3[0] + " " + array3[1]+ " " + array3[2]);
int[] array4;
array4 = new int[]{3,4,5}; // 배열의 선언과 객체 대입을 분리
System.out.println("array4 : "+array4[0] + " " + array4[1]+ " " + array4[2]);
// 배열의 값 대입 방법 3
int[] array5 = {3,4,5}; // 강제초기화 생략
System.out.println("array5 : "+array5[0] + " " + array5[1]+ " " + array5[2]);
// int[] array6;
// array6 = {3,4,5}; // 배열선언하고, 객체 대입은 분리 불가
}
}
* 힙 메모리에서의 강제 초깃값
기본/참조 | 자료형 | 기본값 |
기본 | 불리언 (boolean) | false |
정수(byte, short/char, int, long) | 0 | |
실수(float, double) | 0.0 | |
참조 | 클래스, 배열 ... | null |
스택 메모리의 초깃값과 참조 자료형의 강제 초깃값
import java.util.Arrays;
public class Array_Ex03 {
public static void main(String[] args) {
int value1;
// System.out.println(value1); 오류
int[] value2;
// System.out.println(value2); 오류
// 강제 초기화되지 않아서 오류 발생
int value3 = 0;
System.out.println(value3); // 0으로 초기화
int[] value4 = null;
System.out.println(value4);
System.out.println();
// 기본 자료형 배열
boolean[] array1 = new boolean[3]; // false로 초기화
// boolean의 초기값은 false; // Boolean의 초기값은 null;
for(int i=0; i<3; i++) {
System.out.print(array1[i] + " ");
}
System.out.println();
int[] array2 = new int[3]; // 0으로 초기화
for(int i=0; i<3; i++) {
System.out.print(array2[i] + " ");
}
System.out.println();
double[] array3 = new double[3]; // 0.0 으로 초기화
for(int i=0; i<3; i++) {
System.out.print(array3[i] + " ");
}
System.out.println();
// 참조 자료형 배열
String[] array4 = new String[3]; // null 으로 초기화
for(int i=0; i<3; i++) {
System.out.print(array4[i] + " ");
}
System.out.println();
System.out.println();
// 배열을 한번에 출력
System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));
System.out.println(Arrays.toString(array3));
System.out.println(Arrays.toString(array4));
System.out.println();
//기본 자료형과 참조 자료형의 측징비교
// 기본 자료형의 대입 연산 - 데이터 복사해서 변경 - 원본데이터 영향X
int value10 = 3;
int value11 = value10;
value11 = 7;
System.out.println(value10);
System.out.println(value11);
System.out.println();
// 참조 자료형의 대입 연산 - 실제 데이터 위치값 복사 - 원본데이터 변경
int[] array11 = new int[] {33,44,55};
int[] array12 = array11;
array12[0] = 77;
System.out.println(array11[0]);
System.out.println(array12[0]);
System.out.println();
}
}
1차원 배열의 원소 값 출력
import java.util.Arrays;
public class Array_Ex04 {
public static void main(String[] args) {
// 배열의 길이 .length
int[] a = new int[] {1,2,3,4,5};
System.out.println(a.length); // 5
int[] array = new int[] {3,4,5,6,7};
System.out.println("배열의 길이 : "+array.length); // 배열의 길이
// 배열의 인덱스 값을 넣어 원소 값 1개씩 출력
System.out.print(array[0] + " ");
System.out.print(array[1] + " ");
System.out.print(array[2] + " ");
System.out.print(array[3] + " ");
System.out.print(array[4] + " ");
System.out.println();
System.out.print("array[i] : ");
for(int i=0; i<array.length; i++) {
System.out.print(array[i]+ " ");
}
System.out.println();
// for - each 문 for(원소자료형 변수명 : 집합 객체)
System.out.print("array[K] : ");
for(int k : array) {
System.out.print(k + " ");
}
System.out.println();
System.out.println(Arrays.toString(array)); // Arrays 클래스의 toString() 메서드
}
}
2차원 정방 행렬 배열
int[ ][ ] a ;
인덱스 번호 | 0 | 1 | 2 | 3 |
0 | a[0][0] | a[0][1] | a[0][2] | a[0][3] |
1 | a[1][0] | a[1][1] | a[1][2] | a[1][3] |
2 | a[2][0] | a[2][1] | a[2][2] | a[2][3] |
2차원 정방 행렬의 구조와 위치별 인덱스 번호[표]
2차원 배열의 3가지 선언 방법과 다양한 배열 선언
public class Array_Ex05 {
public static void main(String[] args) {
// 2차원 배열 선언방식
// // 자료형[] 변수명
// int[][] a;
// double[][] b;
// String[][] c;
// // 자료형 변수명[][]
// int aa[][];
// double bb[][];
// String cc[][];
// // 자료형[] 변수명[]
// int[] aaa[];
// double[] bbb[];
// String[] ccc[];
// 배열의 선언 방법 1
int[][] array1 = new int[3][4];
int[][] array2;
array2 = new int[3][4];
// 배열의 선언 방법 2
int array3[][] = new int[3][4];
int array4[][];
array4 = new int[3][4];
// 배열의 선언 방법 3
int[] array5[] = new int[3][4];
int[] array6[];
array6 = new int[3][4];
// 다양한 배열 선언
boolean[][] array7 = new boolean[3][4];
int[][] array8 = new int[2][4];
double[][] array9 = new double[3][5];
String[][] array10 = new String[2][6]; // 참조 자료형 배열
}
}
2차원 비정방 행렬 배열의 3가지 원소 값 대입 방법
public class Array_Ex07 {
public static void main(String[] args) {
// 2차원 비정방 행렬 배열의 3가지 원소 값 대입방법
// 비정방 행렬의 선언 및 값 대입 방법 1
int[][] array1 = new int[2][];
array1[0] = new int[2];
array1[0][0] = 1;
array1[0][1] = 2;
array1[1] = new int[3];
array1[1][0] = 3;
array1[1][1] = 4;
array1[1][2] = 5;
System.out.println("array1");
System.out.println(array1[0][0] + " " + array1[0][1]);
System.out.println(array1[1][0]+ " " + array1[1][1] + " " +array1[1][2]);
System.out.println();
int[][] array2 = new int[2][];
array2[0] = new int[]{1,2};
array2[1] = new int[]{3,4,5};
System.out.println("array2");
System.out.println(array2[0][0] + " " + array2[0][1]);
System.out.println(array2[1][0]+ " " + array2[1][1] + " " +array2[1][2]);
System.out.println();
// 비정방 행렬의 선언 및 값 대입 방법 2
int[][] array3 = new int[][]{{1,2},{3,4,5}};
System.out.println("array3");
System.out.println(array3[0][0] + " " + array3[0][1]);
System.out.println(array3[1][0]+ " " + array3[1][1] + " " +array3[1][2]);
System.out.println();
int[][] array4; // 배열의 선언과 객체 대입 분리 가능
array4 = new int[][] {{1,2},{3,4,5}};
System.out.println("array4");
System.out.println(array4[0][0] + " " + array4[0][1]);
System.out.println(array4[1][0]+ " " + array4[1][1] + " " +array4[1][2]);
System.out.println();
// 비정방 행렬의 선언 및 값 대입 방법 3
int[][] array5 = {{1,2},{3,4,5}};
System.out.println("array5");
System.out.println(array5[0][0] + " " + array5[0][1]);
System.out.println(array5[1][0]+ " " + array5[1][1] + " " +array5[1][2]);
System.out.println();
// error
// int[][] array6;
// array6 = {{1,2},{3,4,5}};
}
}
2차원 배열의 원소 값 출력
public class Array_Ex08 {
public static void main(String[] args) {
// 2차원 배열의 출력
// // 이중 for문을 이용한 2차월 배열 원소 출력
// int[][] a = {{1,2},{3,4,5}};
// for(int i=0; i<a.length; i++) {
// for(int j=0; j<a[i].length; j++) {
// System.out.println(a[i][j]);
// }
// }
// System.out.println();
// // 이중 for-each문을 이용한 2차원 배열 원소 출력
// for(int[] m : a){
// for(int n : m) {
// System.out.println(n);
// }
// }
// 2차원 배열의 원소값 출력
// 2차원 데이터의 배열의 길이
int[][] array1 = new int[2][3];
System.out.println(array1.length); // 행 개수
System.out.println(array1[0].length); // 첫번째 행의 열 개수
System.out.println(array1[1].length); // 첫번째 행의 열 개수
System.out.println();
int[][] array2 = new int[][] {{1,2},{3,4,5}};
System.out.println(array2.length); // 행 개수
System.out.println(array2[0].length); // 첫번째 행의 열 개수
System.out.println(array2[1].length); // 첫번째 행의 열 개수
System.out.println();
// 2차원 배열의 출력 방법
System.out.print(array2[0][0]+ " ");
System.out.print(array2[0][1]+ " ");
System.out.println();
System.out.print(array2[1][0]+ " ");
System.out.print(array2[1][1]+ " ");
System.out.print(array2[1][2]);
System.out.println();
System.out.println();
// 이중 for문 사용
for(int i=0; i<array2.length; i++){
for(int j=0; j<array2[i].length; j++) {
System.out.print(array2[i][j] + " ");
}
System.out.println();
}
System.out.println();
//for-each문 사용
for(int[] array : array2) {
for(int k : array) {
System.out.print(k + " ");
}
System.out.println();
}
}
}
문자열을 저장하는 String
String 참조변수명 = new String("문자열") | String 참조변수명 = "문자열" |
String str = new String("Hello"); | String str = "Hello"; |
String 객체 저장하기
import java.util.Arrays;
public class CreatString {
public static void main(String[] args) {
// // String으로 객체를 생성하는 방법 - 1
// String str1 = new String("Hello");
// System.out.println(str1);
// // String으로 객체를 생성하는 방법 - 2
// String str2 = "Hello!!";
// System.out.println(str2);
// 객체 안의 값을 변경하면 새로운 객체를 생성
String str1 = new String("hello");
String str2 = str1;
str1 = "Hello World!";
System.out.println(str1); // Hello World!
System.out.println(str2); // hello
// 문자열 수정
String str3 = new String("hi");
String str4 = str3;
str3 = "hi hello";
System.out.println(str3); // hi hello 바뀜
System.out.println(str4); // hi -복사전 바뀌지 않음
// 배열 참조형 수정
int[] array1 = new int[] {3,4,5};
int[] array2 = array1; // 참조형은 그냥 다 바꿈
array1[0] = 6;
array1[1] = 7;
array1[2] = 8;
System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));
}
}
문자열 + ?
public class PlusOperationOfString {
public static void main(String[] args) {
// 문자열 + 문자열
String str1 = "안녕" + "하세요" + "!" ;
System.out.println(str1);
String str2 = "반갑";
str2 += "습니다";
str2 += "!";
System.out.println(str2);
System.out.println();
// 문자열 + 기본 자료형 또는 기본자료형+ 문자열
String str3 = "안녕" + 1;
String str4 = "안녕" + String.valueOf(1); // 문자열로 변환
String str5 = "안녕" + "1";
System.out.println(str3);
System.out.println(str4);
System.out.println(str5);
System.out.println();
// 문자열과 기본자료형 혼용
System.out.println(1 + "안녕"); // 1안녕
System.out.println(1 + "안녕" + 2); // 1안녕2
System.out.println("안녕" + 1 + 2); // 안녕12
System.out.println(1 + 2 + "안녕"); // 앞에서부터 연산수행 3안녕
}
}
String 클래스의 주요 메서드 1
문자열 길이 length,
문자열 검색 charAt(), indexOf(), lastIndexOf(),
문자열 변환 및 연결 String.valueOf(기본자료형) : 기본자료형 -> 문자열 변환
문자열 연결 concat()
import java.util.Arrays;
public class MethodOfString {
public static void main(String[] args) {
// 문자열 길이
String str1 = "Hello Java!";
String str2 = "안녕하세요! 반갑습니다.";
System.out.println(str1.length()); // 11
System.out.println(str2.length()); // 13
System.out.println();
// 문자열 검색
// @charAt()
System.out.println(str1.charAt(1)); // e
System.out.println(str2.charAt(1)); // 녕
System.out.println();
// @indexOf(), @lastIndexOf()
System.out.println(str1.indexOf('a')); // 7
System.out.println(str1.lastIndexOf('a')); // 9
System.out.println(str1.indexOf('a', 8)); // 9
System.out.println(str1.lastIndexOf('a', 8)); // 7
System.out.println(str1.indexOf("Java")); // 6
System.out.println(str2.lastIndexOf("하세요")); // 2
System.out.println(str1.indexOf("Bye")); // 없는 경우 -1반환
System.out.println(str2.lastIndexOf("고맙습니다")); // 없는 경우 -1반환
System.out.println();
// 문자열 반환 및 연결
// @String.valueOf(기본자료형) : 기본자료형 -> 문자열 반환
String str3 = String.valueOf(2.3);
String str4 = String.valueOf(false);
System.out.println(str3);
System.out.println(str4);
// @concat() : 문자열 연결
String str5 = str3.concat(str4);
System.out.println(str5);
// String.valueOf() + concat()
String str6 = "안녕"+3;
String str7 = "안녕".concat(String.valueOf(3));
System.out.println(str6);
System.out.println(str7);
String str8 = "Hello Java!";
String str9 = "안녕하세요!";
// @toCharArray() : 문자열 -> char[] 변환
char[] array3 = str8.toCharArray();
char[] array4 = str9.toCharArray();
System.out.println(Arrays.toString(array3));
System.out.println(Arrays.toString(array4));
}
}
String 클래스의 주요메서드 2
문자열 수정 toLowerCase(), toUpperCase(), replace()
문자열 일부 substring(),
특정 기호를 기준으로 문자열 분리 split(),
문자열 좌우공백 제거 trim()
문자열 내용비교 equals(), equalsIgnoreCase()
import java.util.Arrays;
public class MethodOfString2 {
public static void main(String[] args) {
// 문자열 수정
// @toLowerCase(). @toUpperCase()
String str1 = "Java Study";
System.out.println(str1.toLowerCase());
System.out.println(str1.toUpperCase());
// @replace()
System.out.println(str1.replace("Study", "공부"));
// @split()
String[] strArray = "abc/def-ghi jkl".split("/|-| "); // /또는 -또는 ' '공백 으로 구분된 문자열 배열 반환
System.out.println(Arrays.toString(strArray));
// @trim()
System.out.println(" abc ".trim());
System.out.println();
// 문자열 내용 비교
String str2 = new String("Java");
String str3 = new String("Java");
String str4 = new String("java");
// @stack 메모리 비교 == : 위치 비교
System.out.println(str2 == str3); // false
System.out.println(str3 == str4); // false
System.out.println(str4 == str2); // false
// @equals(), @equalsIgnoreCase() : 내용비교
System.out.println(str2.equals(str3)); // true
System.out.println(str3.equals(str4)); // false
System.out.println(str3.equalsIgnoreCase(str4)); // true
}
}
문자열 - 이름과 나이 뽑아 내기
public class StringStr {
public static void main(String[] args) {
String str = "내 이름은 [홍길동]입니다. 나이는 [15]살 입니다";
String name;
int age;
int Start1 = str.indexOf("[");
int end1 = str.indexOf("]");
name = str.substring(Start1+1, end1);
int Start2 = str.lastIndexOf("[");
int end2 = str.lastIndexOf("]");
// age = str.substring(Start2+1, end2); // 형변환 필요
age = Integer.parseInt(str.substring(Start2+1, end2));
System.out.println(name); // 홍길동
System.out.println(age); // 15
}
}
'JAVA SPRING > java' 카테고리의 다른 글
JAVA_011) 클래스의 상속과 다형성 (1) | 2023.04.27 |
---|---|
JAVA_009) 클래스외부(패키지,임포트), 자바제어자(public,protected,default,private), Static (0) | 2023.04.26 |
JAVA_008) 클래스와 객체, 클래스의 내부 구성요소(생성자, this키워드, this()메서드) (0) | 2023.04.25 |
JAVA_007) 컬렉션 프레임워크 - List, Map, Set (0) | 2023.04.03 |
JAVA_006) 객체지향개념_3 개념적인 메소드 설계&실행2 (0) | 2023.03.16 |