조건문과 반복문 (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% 호환 가능)
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(배열이름)
배열 랜덤 섞기(random shuffle)
2차원 배열 : 배열의 배열
int [][] score = new int[행,세로][열,가로];
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 |