본문 바로가기

(08.20) java 기초 - 반복문(while & for) , 배열

@starweb2025. 8. 25. 18:21

[ 2주차 - 0820 ] 

    금일 커리큘럼
        ├ 09:00 ~ 12:00 자바 프로그래밍 기초 (반복문 while & for)
        └ 13:00 ~ 18:00 자바 프로그래밍 기초 (반복문과 label, 배열)

1. 반복문 (While)

while() 문은 () 내 false값 들어오거나 내부 break 실행 될때까지 루프.

비교연산 방식

// 비교연산 방식
int i = 0;
while(i < 10) { // 0 ~ 9 반복
    System.out.printf("i:%d ", i);
    i++; // 증가
}

탈출 방식 (break)

// 탈출 방식
int i = 0;
while(true) {
    if(i == 10) break; // 0 ~ 9 반복
    System.out.printf("i:%d ", i);
    i++;
}

do while 방식

// do-while방식
int i = 0;
do {
    System.out.printf("i:%d ", i);
    i++;
} while (i < 10); // 0 ~ 9 반복

continue 예시

int i = 0;
while (i++ < 10) {
    if(i % 2 != 0) continue; // 홀수 제외 (건너뛰기)
    System.out.printf("i:%d ", i);
}

연습 1 ~ 100 합산

int sum = 0, min = 1, max = 100;
int i = min;
while (i <= max) {
    sum += i;
    i++;
}
System.out.printf("합산 : %d%n", sum);

2. 반복문 (for)

while() 과 다르게 for()은 한 문장으로 루프 정의.

  • for(루프변수; 조건식; 증감식) {}
  • for(;;) == while(true)

기본 방식

for(int i = 0; i < 10;  i++) { // 0 ~ 9
    System.out.printf("i:%d, ", i);
}

true 탈출 방식

int i = 0;
for(;;) {
    if( i == 10) break; // 0 ~ 9
    System.out.printf("i:%d, ", i);
    i++;
}

continue 예시

for(int i = 0; i < 10; i++) {
    if(i % 2 != 0) continue; // 홀수 제외 (건너뛰기)
    System.out.printf("i:%d ", i);
}

이중 반복문

for(int i = 0; i < 5; i++) { // 0 ~ 4
    System.out.printf("i:%d = ", i);
    for(int j = 0; j < 5; j++) { // 0 ~ 4
        System.out.printf("j:%d, ", j);
    }
    System.out.println();
}
# 실행결과
i:0 = j:0, j:1, j:2, j:3, j:4
i:1 = j:0, j:1, j:2, j:3, j:4

반복문 Label

label은 중첩 반복문에서 특정 반복문을 제어하고 싶을 때 사용

/*
 * label인 'outter' 대상은 바깥 for문 (처음for)
 * 내부 for문에서 break의 실행을 바깥 for문에 연결됨.
 */
outter:
    for(int i = 0; i < 3; i++) {
        System.out.printf("i: %d = |", i);
        for(int j = 0; j < 10; j++) {
            if(i == 2 && j == 5) break outter; // 바깥쪽 반복문 종료
            System.out.printf(" j:%d |", j);
        }
        System.out.println();
    }
# 실행 결과
i: 0 = | j:0 | j:1 | j:2 | j:3 | j:4 | j:5 | j:6 | j:7 | j:8 | j:9 |
i: 1 = | j:0 | j:1 | j:2 | j:3 | j:4 | j:5 | j:6 | j:7 | j:8 | j:9 |
i: 2 = | j:0 | j:1 | j:2 | j:3 | j:4 |

3. 배열 (Array)

배열 ? 특정 타입의 여러 데이터를 하나로 묶어서 관리하는 자료구조

  • 장졈
    • ✅ 인덱스로 빠른 접근 가능
    • ✅ 메모리 효율적
    • ✅ 반복문과 함께 사용 용이
  • 단점
    • ❌ 고정된 크기임
    • ❌ 삽입삭제 어려움
    • ❌ 같은 타입만 가능

선언방식

// 선언 방식
int[] exArr; 
exArr = new int[3]{1, 2, 3}; // exArr: [1, 2, 3]

int[] intArr = new int[3]; // intArr: [0, 0, 0]
int[] intArr2 = {0, 5, 0}; // intArr2: [0, 5, 0]

String[] strArr = new String[5]; // strArr: [null, null, null, null, null]
boolean[] bolArr = new boolean[2]; // bolArr : [false, false]
// ...

향상된for문 - 배열읽기

String[] strArr = new String[5];

for(int i = 0; i < strArr.length; i++) {
    strArr[i] = "인덱스:" + i;
}

for(String str : strArr) {
    System.out.printf("%s, ", str);
}
System.out.println();

// -----------

int[] intArr = {10, 20, 30};
int sum = 0;
for (int num ; intArr) {
    sum += num;
}
System.out.printf("합계: %d%n", sum);
# 실행 결과
인덱스:0, 인덱스:1, 인덱스:2, 인덱스:3, 인덱스:4,
합계: 60
  • 장점: 코드 간결
  • 단점: 인덱스를 사용 불가, 정순회만 가능.
  • 사용 시기: 값 읽기용 or 인덱스가 필요 없을 때

4. 배열복사

배열은 일반 자료형과 다르게 타변수를 참조해서 만든배열을 수정하게되면 기존 타변수에 영향 끼침.

int i = 10;
int i2 = i;
i2 = 20;
// i = 10, i2 = 20 (기존복사 영향x)

// 얕은 복사
int[] intArr = {1, 2, 3};
int[] intArr2 = intArr;
intArr2[0] = 100;
// intArr: [100, 2, 3] , intArr2: [100, 2, 3]

// 깊은 복사 (for)
int orgArr = {10, 20, 30};
int copyArr = new int[orgArr.length];
for (int i = 0; i < copyArr.length; i++) {
    copyArr[i] = orgArr[i];
}
copyArr[0] = 100;
// orgArr: [10, 20, 30] , copyArr: [100, 20, 30]

Array util 사용 깊은 복사

import java.util.Arrays;

// pre code...
int[] orgArr = {100, 200, 300, 400, 500};

// System.arraycopy() 사용
int[] copyArr1 = new int[orgArr.length];
System.arraycopy(orgArr, 0, copyArr1, 0, orgArr.length);

// 3Arrays.copyOf() 사용
int[] copyArr2 = Arrays.copyOf(orgArr, orgArr.length);

// Arrays.copyOfRange() 사용 (범위 복사)
int[] copyArr3 = Arrays.copyOfRange(orgArr, 1, 4); // 인덱스 1~3

copyArr1[0] = 1;
copyArr2[0] = -1;
copyArr3[0] = -2;

System.out.println("orgArr: " + Arrays.toString(orgArr));
System.out.println("copyArr1: " + Arrays.toString(copyArr1));
System.out.println("copyArr2: " + Arrays.toString(copyArr2));
System.out.println("copyArr3: " + Arrays.toString(copyArr3));
// next code...
# 출력 결과
orgArr: [100, 200, 300, 400, 500]
copyArr1: [1, 200, 300, 400, 500]
copyArr2: [-1, 200, 300, 400, 500]
copyArr3: [-2, 300, 400]

etc.

복습 (java.lang.Integer)

String stVal = "1234";

// String -> int
int num = Integer.parseInt(stVal);
// String -> double
double dd = Double.parseDouble(stVal);
// int -> String
String str = Integer.toString(num);

 

 


멋사 부트캠프 개인학습 git : https://github.com/star1431/backend

starweb
@starweb :: starweb 님의 블로그

starweb 님의 블로그 입니다.

공감하셨다면 구독도 환영합니다!

목차