본문 바로가기
Java

Java 5일차 : 반복문

by Detol 2023. 2. 8.

오늘은 자바에서의 반복문에 대해 알아보겠습니다.

 

 

반복문은 이름 그대로 반복문 안의 구문을 반복해서 실행하게 해주는 구문입니다.

for, while, do ~ while 구문이 있습니다. 오늘은 이 반복문들을 하나씩 알아보겠습니다.

 

 

for구문의 기본적인 형식입니다.

for(시작값 ; 끝값 ; 증가값) 이 들어가며 그림과 같은 형태를 띄게 되겠습니다.

위의 그림 같은 경우는 i가 0부터 4까지 진행되는 구조로써

1 -> 2 -> 4 -> 3 의 순서에 따라 i가 0일 때 i가 5보다 작은지 확인 후에 4번 구문이 돌아가며

구문 실행 뒤에는 i의 값을 1 증가시킵니다.

이러한 과정을 거쳐 총 5번 반복실행이 되겠습니다.

 

 

바로 예시로 넘어가 보겠습니다.

// 1부터 10까지의 합
// 변수는 선언 시 초기화를 해주어야 한다.
int sum = 0; //지역변수 sum 선언과 함께 0으로 초기화
for(int i = 1; i <= 10; i++) {
    sum += i;
}
System.out.printf("1부터 10까지의 합은 : %d\n", sum);

1부터 10까지의 합을 반복문을 이용하여 구한 예시입니다.

i의 값을 1부터 1씩 증가시켜 10까지 반복되게 됩니다.

 

 

//사용자가 원하는 1~9 사이의 정수를 입력하여
//그 정수를 이용하여 구구단 출력
Scanner sc = new Scanner(System.in);

int num, result = 0; //사용자가 입력한 값을 저장할 변수와 곱을 저장할 변수 선언

System.out.printf("1-9 사이의 정수를 입력하시오");
num = sc.nextInt();

System.out.printf("입력한 정수 %d를 이용한 구구단\n\n", num2);
for(int i = 1; i <= 9; i++) {
    result = num * i;
    System.out.printf("%d * %d = %2d\n", num, i, result);
}

for문의 가장 대표적인 예시인 구구단입니다.

Scanner를 이용하여 1-9까지의 값을 사용자에게 입력받아 입력받은 수의 구구단을 출력하는 소스입니다.

 

 

 

다음은 while구문입니다. for문처럼 초기값, 조건문, 증가값이 들어가지만 형태가 다릅니다.

또한 for문과 while문은 무한으로 계속 반복되게 하는 것이 있는데 무한루프라고 부릅니다.

오른쪽 그림과 같은 형태를 지니겠습니다.

 

while문에 대해서 예시를 통해 한 번 보시겠습니다.

int sum = 0;

int i = 1; //while 구문의 초기값 선언
while(i <= 10) {
    sum += i;
    i++;
}
System.out.printf("1 ~ 10까지의 합은 : %d", sum);

1부터 10까지의 합을 while구문을 통해 구한 예시입니다.

int i = 0; 을 통해 초기값을 선언한 뒤 while() 안에 i <= 10을 적어 i가 10보다 같거나 작을 때 까지 반복되게 합니다.

그 뒤에 while문 안의 구문이 끝날 때 i의 값을 1증가시켜줍니다.

 

 

Scanner sc = new Scanner(System.in);
int num1, num2; //정수형 변수 선언
for(;;) { //무한루프 선언
    System.out.printf("첫 번째 정수 입력 : ");
    num1 = sc.nextInt();
    System.out.printf("두 번째 정수 입력 : ");
    num2 = sc.nextInt();

    System.out.printf("%d + %d = %d\n", num1, num2, num1 + num2);
}

Scanner와 for문(무한루프)을 통해 두 정수를 입력받아 그 합을 구하는 예시입니다.

무한루프를 적용하였음으로 합이 출력된 이후에도 계속 반복되게 됩니다.

실행해보시면 이해가 빠르실겁니다.

 

Scanner sc = new Scanner(System.in);
int num1, num2; //정수형 변수 선언
while(true) {
    System.out.printf("첫 번째 정수 입력 : ");
    num1 = sc.nextInt();
    System.out.printf("두 번째 정수 입력 : ");
    num2 = sc.nextInt();

    System.out.printf("%d + %d = %d\n", num1, num2, num1 + num2);
}

다음은 Scanner와 while문(무한루프)를 이용하여 두 정수를 입력받아 그 합을 구하는 예시입니다.

 

 

다음은 do ~ while문입니다.

전체적인 형태는 while문과 유사하지만 앞에 do가 붙고 while(조건)이 뒤에 붙습니다.

do ~ while문은 조건과 상관 없이 구문에 있는 소스가 적어도 한 번 실행되게 됩니다.

 

 

int num = 200;
while(num ==300){
    System.out.printf("while구문을 실행합니다.\n");
}
do {
    System.out.printf("참 혹은 거짓이든 이 구문은 반드시 실행합니다.\n");
}while(num == 300);

while문과 do ~ while문을 비교한 예시입니다.

num의 값이 200이기 때문에 while문의 구문은 실행되지 않지만 

do ~ while문은 조건에 맞지 않아도 적어도 한 번은 실행됩니다.

 

 

오늘 내용을 종합하여 낸 문제입니다. 한 번 풀어보시면 도움이 되실 겁니다.

힌트를 드리자면 구문을 탈출하는 break; 문과 지난 글에 설명드린 조건문을 같이 활용하시면 됩니다

아래에 답을 같이 적어드리겠습니다.

코딩에는 정답이 없기 때문에 제가 드린 소스가 정답이라고 단정지을 수는 없습니다만 참고하시면 좋을 것 같습니다.

 

 

 

 

// 1. while 구문을 이용하여 합을 구하는 무한 루프를 작업하시오
// (단, 첫 번째 입력 값이 0이면 무조건 while구문을 빠져나가 프로그램 종료)
Scanner sc = new Scanner(System.in);
int num1, num2, sum = 0;
while(true) {
    System.out.printf("첫 번째 값을 입력하시오 (0입력시 종료)");
    num1 = sc.nextInt();
    if(num1 == 0) break;
    System.out.printf("두 번째 값을 입력하시오");
    num2 = sc.nextInt();
    System.out.printf("%d + %d = %d\n\n", num1, num2, num1 + num2);
}



// 2. for구문을 이용하여 합을 구하는 프로그램을 코딩
// 합을 출력하는 것이 아니라 누적 합이 1000이 넘는 시작 점이 어디인지 알 수 있는 코딩
// (1부터 100까지의 합) ex) n일 때 합이 1000이 넘어갑니다.
int result = 0;
for(int i = 1; i <= 100; i++) {
    result += i;
    if(result >= 1000) {
        System.out.printf("%d 를 더하는 시점부터 1000이 넘어갑니다.\n\n", i);
        break;
    }
}

정답입니다.

댓글