본문 바로가기

개발/algorithm

[java] 반복 - 양수만 입력하기(do while문) / while,for,do문 차이

반응형

스터디 정리

양수만 입력하기 


class SumFor {
    public static void main(String[] args) {
        Scanner stdIn = new Scanner(System.in);

        System.out.println("1부터 n까지의 합을구합니다."); // 키보드 깂을 입력 받는 stdIn.nextInt()보다 앞에 입력
        System.out.print("n의 값:");
        int n = stdIn.nextInt(); // 키보드 입력 값 중 정숫값 얻어내기

        int sum = 0;                    // 합

        for (int i = 1; i <= n; i++)
            sum += i;                    // sum에 i를 더합니다.

        System.out.println("1부터 " + n + "까지의 합은 " + sum + "입니다.");
    }
}

 

 

 

위의 코드에 음수를 입력 할 경우 1부터 n까지 합은 0이 된다. 

이는 수학적으로 정확한 표현이 아니며 양수만 n값으로 입력 가능하도록 하여야 한다.

 

n의 값이 양수가 들어 올때까지 함수를 반복하고, n의 값이 양이 될 경우 1부터 n 까지의 합을 구하는 코드로 변경하기 

package chap01Ex;
import java.util.Scanner;
// 1, 2, …, n의 합을 구합니다(양수만 입력).

class SumForPos {
    public static void main(String[] args) {
        Scanner stdIn = new Scanner(System.in);
        int n;

        System.out.println("1부터 n까지의 합을구합니다.");

        do {
            System.out.print("n의 값:");
            n = stdIn.nextInt();
        } while (n <= 0);

        int sum = 0;        // 합
        for (int i = 1; i <= n; i++)
            sum += i;        // sum에 i를 더함

        System.out.println("1부터 " + n + "까지의 합은 " + sum + "입니다.");
    }
}
 

do문은 일단 루프 본문을 한 번 실행한 다음에 계속 반복할 것인지를 판단하는 사후 판단 반복문

n이 0보다 작거나 같을 경우 반복문 계속 실행 

 

 

 

사전판단, 사후판단 문 차이 


 

사전판단 - while, for문 

사후판단 - do while문

 
package chap01Ex;
import java.util.Scanner;
// 1, 2, …, n의 합을 구합니다.

class SumWhile {
    public static void main(String[] args) {
        Scanner stdIn = new Scanner(System.in);

        System.out.println("1부터 n까지의 합을구합니다.");
         System.out.print("n의 값:");
        int n = stdIn.nextInt();

        int sum = 0;                // 합
        int i = 1;

        while (i <= n) {            // i가 n 이하면 반복합니다.
            sum += i;                // sum에 i를 더합니다.
            i++;                    // i 값을 1만큼 증가시킵니다.
        }
        System.out.println("1부터 " + n + "까지의 합은 " + sum + "입니다.");
    }
}

 

while문은 어떤 조건이 성립하는 동안 처리를 반복하여 실행 

 

하나의 변수를 사용 하는 경우에는 for문 사용이 좋다.

 

 

연습문제1. 두 변수 a,b에 정수를 입력하고 b-a를 출력 (조건 : b>a)

 
package chap01Practice;
import java.util.Scanner;

public class test {
    public static void main(String[] args) {
        Scanner stdIn = new Scanner(System.in);
        int a;
        int b;
        
        do {
            System.out.print("a입력 : ");
            a = stdIn.nextInt();
            System.out.print("b입력 :");
            b = stdIn.nextInt();
        } while (a<b);
        
        System.out.println("a-b는 " + (a-b) + "입니다");
    }
}

a가 b보다 작을 경우 계속 a,b를 다시 입력 하여 a가 b보다 클경우 빠져 나옴  

 

 

 연습문제1 해답코드

 
package chap01Practice;
import java.util.Scanner;
// 정수 b에서 정수 a를 뺀 값을 구합니다(b > a가 되도록 입력 받음)

class Difference_01_10 {
    public static void main(String[] args) {
        Scanner stdIn = new Scanner(System.in);

        System.out.print("a의 값:");
        int a = stdIn.nextInt();

        int b=0;
        while (true) {
            System.out.print("b의 값:");
            b = stdIn.nextInt();
            if (b > a)
                break;
            System.out.println("a보다 큰 값을 입력하세요!");
        }

        System.out.println("b - a는 " + (b - a) + "입니다.");
    }
}

a를 입력 받은 후 무한 while 루프 돌리면서 조건문에 맞을 경우 break; 아닐 경우 b값 계속 다시 입력 

반응형