조건식이 true일 때 문장 수행
문장 수행이 끝나면 조건식 다시 확인 후
true면 수행, 조건식이 false가 될 때까지 수행
조건식이 false가 되면 반복문 종료
별도의 초기식, 증감식이 존재하지 않고
반복 종료 조건을 자유롭게 설정하는 반복문
** 확실히 얼마만큼 반복 후에 끝날지는 모르지만
언젠가 반복 조건이 false가 되는 경우 반복을 종료함
** { } 안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요
while(조건식) {
수행될 코드;
[증감식 or 분기문];
}
int i = 1;
i++;
}
조건식이 true일 때 문장 수행
문장 수행이 끝나면 조건식 다시 확인 후
true면 수행, 조건식이 false가 될 때까지 수행
조건식이 false가 되면 반복문 종료
** { } 안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요
do {
반복 수행될 코드;
-> 무조건 한번은 수행됨
} while(조건식);
int i = 1;
System.out.println(i + "출력");
i++;
} while(i <= 10);
반복문에서는 break문 자신이 포함된 가장 가까운 반복문을 빠져나가는 구문
for(int i = 1;; i++) {
System.out.println(i + " 출력");
if(i >= 10) {
break; // break문을 감싸고 있는{} 가장 가까운 반복문을 빠져나감 (for()여기)
}
}
for(초기값1; 조건식1; 증감식1) {
수행될 코드1;
for(초기값2; 조건식2; 증감식2) {
수행될 코드2; // 반복문2 바로 종료 -> 코드3으로
break;
}
수행될 코드3;
[break;] // []는 생략가능, 코드3 break를 감싸고 있는건 {} 반복문1
}
=> 두 번째 for문에 break를 만날 경우 반복문을 나가 수행될 코드3을 수행 후
다시 첫 번째 for문을 실행하지만
마지막 break가 있다면 수행될 코드3을 수행 후 for문을 완전히 빠져나감
반복문 내에서만 사용 가능하며
반복문 실행 시 continue 아래 부분은 실행하지 않고 반복문 다시 실행
for문의 경우 증감식으로 이동, while(do~while)문의 경우 조건식으로 이동
전체 반복 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 유용
for(int i = 1; i <= 10; i++) {
if(i % 2 == 0) {
continue;
}
System.out.println(i + " 출력");
}
배열의 특징

ex)
int[] arr = new int[3];
int arr[] = new int[3];
배열은 참조 변수로 Heap영역에 할당되며 배열 공간의 주소를 저장
배열 공간의 주소를 이용해 인덱스를 참조하는 방식으로 값 처리

ex) arr[0] = 1;
arr[1] = 2;
ex) for(int i = 0; i < arr.length; i++) {
arr[i] = i;
}
ex) int[] arr = {1, 2, 3, 4, 5};
int[] arr = new int[] {1, 2, 3, 4, 5};
String fruit[] = {"사과", "포도", "참외"};
변수 선언
int num;
=> stack 영역에 int 자료형을 저장할 수 있는 공간 4byte를 할당하고
그 공간에 num이라는 이름을 부여
변수 대입
num = 10;
=> 생성된 num이라는 변수공간에 10이라는 정수값 대입
변수 사용
System.out.println("num에 저장된 값 : " + num);
=> num이 작성된 자리에 num에 저장된 값을 읽어와서 출력
============================
배열 선언
int[] arr; = int arr[];
=> stack 영역에 int[] 자료형 공간을 4byte 할당하고
그 공간에 arr이라는 이름을 부여
해당 변수는 참조형으로 주소값만을 저장할 수 있다
배열 할당
arr = new int[3]
new : "new 연산자" 라고 하며 Heap 메모리 영역에 새로운 공간(배열, 객체)을 할당
int[3] : int 자료형 변수 3개를 하나의 묶음으로 나타내는 배열
new int[3] : Heap 영역에 int형 변수 3칸짜리 int[]을 생성(할당)
arr = new int[3]
int[] int[] -> 같은 자료형 == 연산가능
int[] arr = new int[4];
// ㄴ 참조 변수
// arr[0~3] 전부 JVM에 의해 0으로 초기화 되어있는 상태
arr[0] = 100;
arr[1] = 200;
arr[2] = 500;
arr[3] = 1000;
// arr[4] = 5000;
// java.lang.ArrayIndexOutOfBoundsException: Index 4 out of bounds for length 4
// 배열의 인덱스 범위를 벗어남 : 길이가 4칸까지 배열인데, 없는 인덱스번호인 4에 접근했다.
// 코드에서 빨간줄 에러 : 컴파일 에러
// 실행했을 때 발생하는 에러 : 런타임 에러
// 배열과 for문
// 배열의 길이 (몇 칸인가) : 배열명.length
System.out.println("배열의 길이 : " + arr.length);
for(int i = 0; i < arr.length; i++) {
// i -> 0 1 2 3
System.out.printf("arr[%d]에 저장된 값 : %d\n ", i, arr[i]);
// arr[0]에 저장된 값 : 100
// arr[1]에 저장된 값 : 200
// ...
}
// 선언과 동시에 초기화
int[] arr2 = {1, 2, 3, 4, 5};
// stack 영역에 int[] 자료형 공간을 4byte 할당하고
// 그 공간에 arr2 라는 이름 부여
// Heap 메모리 영역에 int 5칸짜리 int[]을 생성하고
// 0번 인덱스부터 각 요소에 1~5까지 초기화 함 (대입)
// int[] 주소값을 arr2 참조변수가 참조함.
System.out.println(Arrays.toString(arr2));
}

**Heap 영역에 할당된 공간은 !절대! 비어있을 수 없다
=> 최초 할당 시 JVM 기본값이 자동 저장된다 (컴파일러)
boolean : false
나머지 : 0
참조형 : null
arr[0] = 10;
arr[1] = 50;
arr[2] = 100;
System.out.println(arr[0]); // 10
System.out.println(arr[1]); // 50
System.out.println(arr[2]); // 150
실제로 arr 배열이 가진 모든 요소의 값을 알고 싶을 때
//Arrays.toString(배열명);
System.out.println(Arrays.toString(arr)); [10, 50, 100]
String str1 = "가나다"; // String Constant Pool 저장 (문자열 상수풀에 저장) "리터럴 표기법"
String str2 = new String("가나다"); // Heap 새 객체 저장 "뉴스트링 연산"
String str3 = "가나다"; // str1이랑 같은 주소 참조
String str4 = new String("가나다"); // str2처럼 같은 문자열을 가져도 다른 곳을 찾고
System.out.println(str1); // 주소값? str(.toString()이 생략되어있음
System.out.println(str2);
System.out.println(str1.toString());
// String 클래스의 toString() 메서드가 존재 // 얘가 있어서 주소가 안 나오고 값으로 나옴
// toString() 메서드는 자기 자신을 그대로 반환
// System.out.println(str); 을 실행하면
// str.toString()이 자동으로 호출됨
// 대입해 둔 문자열 값 자체가 반환됨
// 주소값(객체의 해시코드)을 확인하고 싶다면 아래처럼 사용 (쓸 일은 없음)
System.out.println(System.identityHashCode(str1));
System.out.println(System.identityHashCode(str2));
System.out.println(System.identityHashCode(str3));
System.out.println(System.identityHashCode(str4));
int max = score[0];
int min = score[0];
for(int i = 0; i < score.length; i++) {
// 0 1 2 3
// 최고점 비교
if(score[i] > max) { // 점수가 max보다 크다면 그 점수가 max다
max = score[i];
}
if(score[i] < min) { // 점수가 min보다 적다면 그 점수가 min이다
min = score[i];
}
}