JAVA 공부 2일차
조건문, 반복문, 배열
1) 조건문/반복문
ㄱ. 조건식의 다양한 예
ㄴ. if 문
- if ( 조건식) { 참일 때 실행 문} else {거짓일 때 실행 문}
- if ( 조건식) { 참일 때 실행 문}else if (조건식2) {조건식2 참일때 실행 문} else {거짓일 때 실행 문}
ㄷ. switich 구문
- - 조건과 일치하는 경우 해당 구문 실행, break를 안쓰면 끝까지 검토 후 조건에 맞는 모든 문장 실행
- case 구문에 대한 적용 예시
case '1': // OK. 문자 리터럴(정수 49와 동일)
case ONE: // OK. 정수 상수
case "YES" // OK. 문자열 리터럴
case num: // Error. 변수는 불가능
case 1.0: // Error. 실수도 불가능
class Control2_1 {
public static void main(String[] args) {
int month = 8;
String monthString = "";
switch (month) {
case 1: monthString = "January";
break;
case 2: monthString = "February";
break;
.
. (중략)
.
case 0: case 13:
System.out.println("이런식으로 case 문을 사용할 수 있습니다.");
break;
case 15:
default: monthString = "Invalid month";
}
System.out.println(monthString);
}
}
ㄹ. for 문
- for 문의 실행 순서 : 초기화 > 조건식 > 조건식에 대한 참 여부 확인 > 증감식 > 조건식 거짓 될때 까지 반복
- 초기화 변수를 밖에서 가져와도 되고, for 문 안에서 선언해도 된다.
int i = 0;
for (i = 0; i < 5; i++) {
System.out.println("for 문이 " + (i + 1) + "번째 반복 실행중입니다.");
}
아래 위는 똑같다.
for (int i = 0; i < 5; i++) {
System.out.println("for 문이 " + (i + 1) + "번째 반복 실행중입니다.");
}
ㅁ. Math.random()
- Math.random() 은 0<= x < 1 범위의 실수를 랜덤으로 뽑아준다.
- 따라서 1~5까지 랜덤으로 필요하다면 (int)를 이용해서 뒤를 잘라서 사용한다.
- 주의사항) 괄호를 잘 포함하지 않으면 랜덤실수를 바로 인트화 시켜 0이 되어 버린다.
int i = (int)(Math.random() * 5 + 1 );
ㅁ. while 과 do-while
- while은 조건을 확인 후 실행, do-while은 처음엔 무조건 실행 후 조건 확인하며 실행
- 예시)
int i = 0;
while (sum <= 100) {
System.out.println("i = " + i);
System.out.println("sum = " + sum);
sum += ++i;
}
do {
System.out.println("i = " + i);
System.out.println("sum = " + sum);
sum += ++i;
} while (sum <= 100);
ㅁ. break 와 continue
- break : 자신이 포함된 하나의 반복문을 벗어난다. 하지만 이름을 붙여 원하는 반복문을 탈출 시킬 수 있다.
- continue : 조건을 걸어주어 해당 반복문을 실행하지 않고 다음 반복문을 실행시킬 수 있다. 역시 이름을 붙여 원하는 반복문을 탈출시킬 수 있다.
while (true) {
if(sum > 100)
break;
++i;
sum += i;
}
allLoop :
while (true) {
for (int j = 1; j < 10; j++) {
if (i == 5) {
break allLoop;
}
System.out.println(i + " * " + j + " = " + (i * j));
}
i++;
}
allLoop : for (int i = 2; i < 10; i++) {
for (int j = 1; j < 10; j++) {
if (i == 5) {
continue allLoop;
}
System.out.println(i + " * " + j + " = " + (i * j));
}
}
2) 배열
ㄱ. 배열의 특징
- 배열의 크기를 바꿀 수 없기에 새로운 배열을 찾아 기본값을 복사해서 저장해야 한다.
ㄴ. 배열 초기화
- 배열 초기화 예
int[] num = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9}; // new int[] 생략 가능
int[] num = {1, 2, 3, 4, 5, 6, 7, 8, 9};
ㄷ. 스트링 배열
- 주요 메서드
메서드 | 설명 |
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[])로 변환해서 반환한다 |
ㄹ. 2차원 배열
- 2차원 배열의 초기화
int[][] score = new int[][]{{}, {}, {}, {}};
int[][] score = {{}, {}, {}, {}};
ㅁ. Arrays
- 문자열 출력 : sout(arr)하면 arr의 저장 주소가 찍히기 때문에 아래와 같이 출력한다.
- 배열 비교 시 1차원 비교는 equals, 다차원 비교에는 deppEquals를 사용한다.
/출력
System.out.println("Arrays.toString(num) = " + Arrays.toString(num));
System.out.println("Arrays.deepToString(score) = " + Arrays.deepToString(score));
/비교
System.out.println("Arrays.equals(strArr1, strArr2) = " + Arrays.equals(strArr1, strArr2));
System.out.println("Arrays.deepEquals(strArr1, strArr2) = " + Arrays.deepEquals(strArr1, strArr2));
- 배열 복사 : 배열과 끝구간 또는 배열과 구간 범위를 지정해 준다. copyOf 와 copyOfRange가 있다.
class Arrays6_2 {
public static void main(String[] args) {
int[] arr = {0,1,2,3,4};
System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
System.out.println();
// copyOf
int[] arr2 = Arrays.copyOf(arr, arr.length);
System.out.println("Arrays.toString(arr2) = " + Arrays.toString(arr2));
int[] arr3 = Arrays.copyOf(arr, 3);
System.out.println("Arrays.toString(arr3) = " + Arrays.toString(arr3));
int[] arr4 = Arrays.copyOf(arr, 7); // 범위가 넘어가는 복사는 초기화값이 들어간다.
System.out.println("Arrays.toString(arr4) = " + Arrays.toString(arr4));
System.out.println();
// copyOfRange
int[] arr5 = Arrays.copyOfRange(arr, 2, 4);
System.out.println("Arrays.toString(arr5) = " + Arrays.toString(arr5));
int[] arr6 = Arrays.copyOfRange(arr, 0, 7);// 범위가 넘어가는 복사는 초기화값이 들어간다.
System.out.println("Arrays.toString(arr6) = " + Arrays.toString(arr6));
}
}
- 정렬 : sort()를 사용한다.
class Arrays6_3 {
public static void main(String[] args) {
int[] arr = {3, 1, 8, 5, 9, 2, 10, 7, 6, 4};
System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
System.out.println();
Arrays.sort(arr); // 오름차순으로 정렬됩니다.
System.out.println("sort");
System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
}
}
- 역정렬 : 타입 변환이 필요하다. Collections.reverseOrder()를 사용해야하는데 아래와 같이 배열 선언 시 Integer로 해야한다. int[] 등으로 받았다면 다른 타입으로 리스트 내 변수들을 받은 후 역정렬 하고 다시 넣어 줘야 할 것 같다.
import java.util.Arrays;
import java.util.Collections;
class Arrays6_3 {
public static void main(String[] args) {
Integer arr[] = {3, 1, 8, 5, 9, 2, 10, 7, 6, 4};
Arrays.sort(arr, Collections.reverseOrder());
System.out.println(Arrays.toString(arr));
}
}
- 해당 변수가 그 값이 맞는지 알려주는 함수 ex) String p="TIL" >> p.equals("TIL") >>true/false