continue 문, break 문
반복문을 빠져나가지 않으면서 즉시 다음 반복으로 넘어간다
for(초기;조건;변화) { 전 continue; 후 }
for문에서 continue를 만나면 즉시 변화식(반복후 작업)으로 이동
초기->조건->전->continue->변화->조건->....
while(조건) { 전 continue; 후 }
while문에서 continue를 만나면 즉시 조건식으로 이동
조건->전->continue->조건->...
do { 전 continue; 후 } while(조건);
while과 다르게 do-while문은 후를 skip하고 조건으로 이동
전->continue->조건->전->continue->조건->...
예시)
import java.util.Scanner;
public class ContinueExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 양수들의 합만 구함
// 음수가 나오면 skip
// 0이 나오면 종료
int sum = 0;
int n = -1;
while(n != 0) {
n = sc.nextInt();
if(n <= 0)
continue;
else
sum += n;
}
System.out.println(sum);
}
}
**가장 최근에 들어온 반복문**
을 벗어난다
그 외의 반복문은 그대로 유지가 됨
for() { // 1
while() { // 2
for() { // 3
break; // 3번 반복문만 탈출
}
break; // 2번 반복문만 탈출
}
}
- 기본 타입
: 논리(boolean), 문자(char)
정수(byte, short, int, long), 실수(float, double)- 레퍼런스 타입
: 배열(Array), class, interface
배치 + 나열 -> 배열 (array)
- 인덱스를 통해서 인덱스에 대응되는 데이터들로 이루어진 연속적인 자료구조
int i0, i1, i2, i3, ..., i9; -> 자료형 10개
int i[10]; -> 자료구조 1개 (int짜리 10개를 가진)
- 배열에 대한 레퍼런스 변수의 ""선언""
-> 우리가 이 배열을 쓰겠다- 배열을 ""생성""
-> 배열에 대해서 저장 공간을 메모리에 할당
int intArray[];
타입 레퍼런스변수명 [];
intArray = new int[5];
레퍼런스변수명 = new 타입[개수];
int intArray[] = new int[5];
int[] intArray = new int[5];
[]의 순서는 상관 없음
"변수 초기화" 👉 int a = 1;
"배열 초기화" 👉 int intArray[] = {0,1,2,3,4};
👉 자동으로 intArray의 크기가 5로 정해짐
👉 앞에[]안
에 개수를 쓰면 "절대" 안됨.
초기화를 안한 배열은 기본값으로 0이 들어있음
public class ArrayExample {
public static void main(String[] args) {
// 선언 생성 따로
int a[];
a = new int[5];
// 선언 생성 동시
int b[] = new int[5];
int[] c = new int[5];
int []d = new int[5];
// 배열 초기화
int e[] = {1, 2, 3, 4};
int f[] = new int[5];
f[3] = 2;
for(int i=0 ; i<=4 ; i++) {
System.out.println(i + " " + f[i]);
}
// System.out.println(f[-1]); 에러남
// System.out.println(f[5]); 에러남
int g[];
// g[0] = 8;
}
}
인덱스 (=원소의 위치) (index)
인덱스의 번호는 0부터 시작한다
마지막 원소의 인덱스 번호는 배열의크기-1
int intArray[] = new int[5];
👉 인덱스 번호의 범위는 0 ~ 4
intArray[3] -> intArray 배열의 3번 인덱스(4번째) 값
intArray[2] = 3; -> intArray 배열의 2번 인덱스(3번째)에 3을 대입
intArray[-1] -> 안됨 (음수 인덱스 X)
intArray[5] -> 안됨 (범위를 벗어난 인덱스 X)
int a = 10;
b = a;
b = 20;
int array1[] = new int[5];
int array2[] = array1;
array1[1] = 2;
array2[1] = 3;
출력: array1[1] -> 3
public class ArrayShare {
public static void main(String[] args) {
int array1[] = new int[5];
int array2[] = array1;
// 레퍼런스 치환 = 배열 공유
array1[1] = 2;
array2[1] = 3;
// array1 : 0 2 0 0 0
// array2 : 0 3 0 0 0
System.out.println(array1[1]);
int a1[] = new int[5];
int a2[] = new int[5];
a1[1] = 2;
for(int i=0 ; i<=4 ; i++) {
a2[i] = a1[i];
}
}
}
int intArray[] = new int[x];
배열의 크기를 숫자로 지정한 것이 아닌 변수로 지정한 경우 -> 크기가 얼만지 모름!
👉 length 필드(필드 = 레퍼런스 변수에 속하는 변수)
int size = intArray.length;
for(int i=0 ; i<size ; i++)
출력 intArray[i];
기존 for문을 변형
for(변수 : 레퍼런스변수) {
}
for(int i: intArray) {
출력 i;
}
- 일반 for문에서는 인덱스를 통한 접근 👉 원소 접근을 할 때 intArray[i];
- for-each문에서는 바로 원소에 접근 👉 원소 접근을 할 때 i;
import java.util.Scanner;
public class ForEachExample {
enum Week {월,화,수,목,금,토,일};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n[] = { 1, 2, 3, 4, 5 };
for(int i=0 ; i<n.length ; i++) {
System.out.print(n[i]+" ");
}
System.out.println();
for(int i: n) {
System.out.print(i + " ");
}
System.out.println();
// String fruit[] = new String[5];
// for(int i=0 ; i<fruit.length ; i++) {
// fruit[i] = sc.nextLine();
// }
// for(String s: fruit) {
// System.out.println(s);
// }
for(Week day: Week.values())
System.out.print(day+" ");
}
}
for-each문을 사용할 수 있는 특이한 타입
enum Week {월,화,수,목,금,토,일};
for(Week day: Week.values())
출력 day;
2차원 이상의 배열을 다차원 배열
int intArray[] = new int[5]; ^ 1차원 int intArray[][] = new int[5][3]; // 5행 3열짜리 int형 2차원 배열 ^ 2차원
ㅁㅁㅁ
ㅁㅁㅁ
ㅁㅁㅁ
ㅁㅁㅁ
ㅁㅁㅁ
intArray.length -> 5 (행의 개수) intArray[0].length -> 3 (열의 개수) intArray[1].length -> 3 (열의 개수)
int intArray[] = {1, 2, 3}; int intArray[][] = {{1, 2, 3}, {4, 5, 6}}; // 2행 3열
1 2 3
4 5 6
public class GradeAverage {
public static void main(String[] args) {
double score[][] = {{3.8, 3.9},
{4.2, 4.5},
{3.1, 2.6},
{4.3, 4.4}};
// 2중 for문과 length 필드를 이용해서
// 총 8개 학기의 학점의 평균을 구하는 코드를 작성
// 바깥쪽 for = 행, 안쪽 for = 열
double sum = 0;
for(int i=0 ; i<score.length ; i++) {
for(int j=0 ; j<score[0].length ; j++) {
sum += score[i][j];
}
}
System.out.println("전체 평균은 " + (sum/(score.length * score[0].length)));
//3.85
}
}
배열의 크기가 직사각형으로 딱 떨어지는 경우 -> 정방형 배열
행별로 열의 크기가 모두 동일int intArray[][] = new int[4][2];
ㅁㅁ
ㅁㅁ
ㅁㅁ
ㅁㅁ
한 번에 선언과 생성을 할 수 없음
int intArray[][] = new int[4][]; intArray[0] = new int[3]; intArray[1] = new int[2]; intArray[2] = new int[3]; intArray[3] = new int[2];
ㅁㅁㅁ
ㅁㅁ
ㅁㅁㅁ
ㅁㅁ
import java.util.Scanner;
public class SkewedArray {
public static void main(String[] args) {
// n = 5
// 10 11 12 13 14
// 20 21 22 23
// 30 31 32
// 40 41
// 50
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int a[][] = new int[n][];
for(int i=0 ; i<n ; i++) {
a[i] = new int[n-i];
}
for(int i=0 ; i<n ; i++) {
// i=0 -> n-0 ĭ
// i=1 -> n-1 ĭ
for(int j=0 ; j<n-i ; j++) {
a[i][j] = (i+1)*10 + j;
}
}
for(int i=0 ; i<a.length ; i++) {
for(int j: a[i]) {
System.out.print(j + " ");
}
System.out.println();
}
for(int[] i: a) {
for(int j: i) {
System.out.print(j + " ");
}
System.out.println();
}
for(int i=0 ; i<a.length ; i++) {
for(int j=0 ; j<a[i].length ; j++) {
System.out.print(a[i][j] + " ");
}
System.out.println();
}
for(int[] i: a) {
for(int j=0 ; j<i.length ; j++) {
System.out.print(i[j] + " ");
}
System.out.println();
}
}
}
결과값: