조건문과 반복문 (if, switch, for, while) : 

조건문 : 조건을 만족할 때만 { } 수행 (0 ~ 1번) 

 - if : 조건식의 결과 = true, false 

 - switch : 조건식의 결과 = 정수, 문자열 / 처리해야 하는 경우의 수가 많은 경우

반복문 : 조건을 만족하는 동안 { } 수행 (0 ~ n번)

 - for : 반복횟수를 알때 

 - while : 반복횟수를 모를때 

 cf. do-while : 블럭을 최소 한 번 이상 반복 -> 사용자의 입력값 받을 때 유용 

if (조건식) {
} else if () {
} else { // 마지막은 보통 else 구문으로 끝나고 생략 가능. 
}
if (조건식) {
	if (조건식) {
    } else {
    }
} else {
}
// 중첩 if 문은 들여쓰기 하여 범위를 명확하게 구분해줘야 한다.

switch 문의 제약 조건 : 

- 조건식의 결과는 정수 또는 문자열이어야 한다. 

- case 문의 값은 정수 상수(문자 포함), 문자열만 가능하며, 중복되지 않아야 한다.  변수 x , 실수 x 

switch (조건식) {
	case 값1 : 
    
    	break;
    case 값2 : 
    
    	break;
	// default;
}
shitch (조건식) {
	case 1 : case 2 : case 3 : 
    
    break; 
}

임의의 정수 만들기 Math.random() :  0.0 ~1.0 사이의 범위에 속하는 하나의 double값을 반환, 1.0은 범위에 포함 x

for 문 : 조건을 만족하는 동안 {  } 반복 , 반복횟수를 알때 적합

for (String day : days) {

}
/*
향상된 for 문 (타입 변수이름 : 배열 or 컬랙션)
: 배열 or 컬렉션의 길이만큼 반복하여 실행
*/

* 범위 (scope)는 좁을 수록 오류를 찾을 때 유리하다. 

 

while 문 : 조건식이 참인동안 { } 반복 , 반복횟수를 모를때 (for문과 while문은 100% 호환 가능)

1부터 몇까지 더해야 100을 넘지 않는지 (반복횟수를 모를때)

do - while 문 : 최소한 한 번은 { } 을 실행하는 것을 보장 (사용자 입력을 받을때 유용하다)

do {
	// 처음 한 번은 무조건 실행
} while ();

 

배열 (Array) : 

같은 타입의 여러 변수를 하나의 묶음으로 다루는 것, 각 저장공간이 연속적으로 배치되어 있다. 

int [] score = new int[5]; // 배열의 생성과 선언을 동시에 , 길이가 5 인 int 배열

배열의 저장공간 = 배열의 요소, 인덱스 = 배열의 요소마다 붙여진 일련번호

Index의 범위는 0부터 '배열의 길이 -1'까지 

배열은 한 번 생성하면 길이를 변경할 수 없다 -> 배열의 길이 : 배열이름.length

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 4 out of bounds for length 4
at co m.example.filterintercepaop.FilterIntercepAopApplication.main(FilterIntercepAopApplication.java:14)

 

배열의 인덱스  범위를 벗어났다는 오류이다. > for 문이 유효한 배열의 인덱스 범위를 넘어서 반복 

따라서 for 문의 조건식에는 배열의 길이를 직접 적어주는 것 보다는 배열이름.length를 사용하는 것이 좋다. 

 

배열의 초기화 : 배열은 생성과 동시에 자동적으로 기본값 0으로 초기화된다. 

int[] score = new int {5,6,7,8,9};
int[] score = {5,6,7,8,9}; // 99% 사용

 

배열의 출력 : Arrays.toString(배열이름)

Arrays.toString(arr)

배열 랜덤 섞기(random shuffle) 

배열 random shuffle

2차원 배열 : 배열의 배열

int [][] score = new int[행,세로][열,가로];

배열 score 의 모든 요소의 합 구하기

int [][] score = {
	{100,100,100}
    , {20,20,20}
    , {30,30}
    , {40,40,40,40}
    , {50}
};

new int [score.length][score[i].length]

 

 

String 클래스 : char[], 메서드(기능)을 결합

- String클래스는 내용변경 x(immutable), readOnly

- 문자열의 결합은 완전히 새로운 문자열을 생성하는 과정(기존것을 변경하는 것이 아님)

* 변경 가능한 문자열 = StringBuffer 클래스 

 

String 클래스의 주요 메서드 

메서드  설명
char charAt(int index) 문자열에서 해당 위치(index)에 있는 문자를 반환
int length() 문자열의 길이를 반환
String substring(int from, int to) 문자열에서 해당 범위의 문자열을 반환 (to 포함 x)
boolean equals(Object obj) 문자열의 내용이 같은지 확인 (같으면 true)
char [] toCharArray() 문자열을 문자배열 char[]로 변환해서 반환 
String str = "ABCDE";
char ch = str.charAt(3); // D

String str = "012345";
String tmp = str.substring(1,4);
System.out.println(tmp); // "123"

 

* boolean 의 기본값 = false , 참조형 의 기본값 = null 

 

 

Arrays 로 배열 다루기 

- 배열의 비교와 출력 : equals(), toString() cf.다차원 배열의 비교 : deepEquals()

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

String[][] str2D = new String[][] {{"a","b"},{"A","B"}};
String[][] str2D2 = new String[][] {{"a","b"},{"A","B"}};
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], arr.length = 복사할 요소의 개수

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

- 배열의 정렬 : sort()

int[] arr = {3,4,1,5,2};
Arrays.sort(arr); // 오름차순 정렬 
System.out.println(Arrays.toString(arr)); // [1,2,3,4,5]

 

'Java' 카테고리의 다른 글

변수(Variable), Scanner, 연산자(Operator)  (0) 2023.07.02
Java, JVM, GC, MultiThreading  (0) 2023.05.18