Coding(Java)/Java(이론)2021. 8. 30. 08:00
반응형

[Java] 11. do-while문, continue문

 

 

do-while문은 '먼저 처리하고(do) 난 다음에 비교하는것(while)'이 특징이다. 그래서 조건비교에서 조건을 만족하지 않더라도 처리를 먼저하고 조건빅가 이루어지고, 최소 한 번은 실행된다.

다음은 do-while문의 구조이다.

do {
     실행문;
} while(조건식);

 실행순서: 1. 실행문, 2. 조건식

 

다음은 do-while문을 이용하여 1부터 10까지의 합을 구하는 프로그램이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package mymain;
 
public class _5_dowhile문1 {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        //10까지의 합
        int sum=0;
        int i  =0;
        
        do 
        {
            //누적식
            sum=sum+i;            
            //증가식
            i++;            
        }
        while(i<=10);
        
        System.out.println(sum);
    }
}
cs

실행결과는 55이다. 

sum=0, i=0인 상태에서 sum=sum+i; 명령이 실행되고 그 다음으로 i가 1씩 증가한다. 이것을 i가 10보다 작거나 같을 때까지 하므로 sum은 1부터 10까지의 합인 55이다. 

 

다음은 do-while문을 이용하여 단을 입력받아 그 단에 해당되는 구구단을 출력하는 프로그램이다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package mymain;
 
import java.util.Scanner;
 
public class _5_dowhile문2 {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan=new Scanner(System.in);
        int dan;//단
        String yn="y"//또 할지 말지에 대한 여부
        
        do {
            System.out.print("단을 입력하시오:");
            dan=scan.nextInt();
            
            //dan(2~9)에 대한 유효성 검증
            if(dan>=2 && dan<=9) {
            
            System.out.printf("---[%d]단 출력---\n", dan);
            
            for(int i=1;i<=9;i++) {//i=1, 2, 3,...,9
                
                System.out.printf("%d×%d=%d\n", dan,i,dan*i);
            }
            
            //계속할 지에 대한 여부
            System.out.print("계속 하시겠습니까?(y/n)");
            yn=scan.next();
            //yn="y" or "Y"
            //yn="n"
            //문자열 비교는 ==사용하면 안됨
            //=>yn.equals("y")사용
            
            //입력된 값이 "y" 또는 "Y"이면, do 문으로 이동
            }else
                System.out.println("단은 2~9 사이의 숫자입니다.");
            
        }while(yn.equals("y")||yn.equals("Y")); 
        
        
        System.out.println("---End---");        
    }
}
 
cs

다음은 이 프로그램을 실행한 결과이다. 

단을 입력하시오:5
---[5]단 출력---
5×1=5
5×2=10
5×3=15
5×4=20
5×5=25
5×6=30
5×7=35
5×8=40
5×9=45
계속 하시겠습니까?(y/n)n
---End---

do 에서 2에서 9 사이의 정수값을 입력받아 for문으로 전달되어 for문이 그 단을 출력한다. 단의 출력이 끝나면 계속 하겠는가?를 묻는데 y를 입력하면 단을 입력하라고 뜨고, n을 입력하면 종료된다.

*문자열이 같은지 비교할 때는 ==를 사용하는 것이 아닌 [문자열변수.equals("비교문자")]를 사용해야 한다.

 

continue문

 

continue문은 반복문을 빠져나가지 않고, 다음 반복으로 제어를 변경한다.

while문, do-while문은 조건식으로, for문은 증감식으로 제어권이 이동된다. 

 

다음은 continue문을 이용하여 1부터 10까지의 홀수들의 합을 구하는 프로그램이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package mymain;
 
public class _6_continue문 {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int sum=0;
                
        for(int i=1;i<=10;i++) {
            if(i%2==0continue;//현재 명령을 종료하고 다음 제어식(i++)으로 이동 
            
            System.out.println("i="+i);
            sum=sum+i;
        }        
        System.out.println(sum);
    }
}
cs

이 프로그램의 실행결과는 다음과 같다.

i=1
i=3
i=5
i=7
i=9
25

for문 안에서 2로 나눈 나머지가 0(짝수)이면 continue문을 실행시켜서 현재 명령을 종료하고 다음 제어식(i++)으로 이동한다. 

 

다음은 do-while문과 continue문을 이용한 구구단 출력 프로그램이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package mymain;
 
import java.util.Scanner;
 
public class _5_dowhile문3 {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan=new Scanner(System.in);
        int dan;//단
        String yn="y"//또 할지 말지에 대한 여부
        
        do {
            System.out.print("단을 입력하시오:");
            dan=scan.nextInt();
            
            //dan(2~9)에 대한 유효성 검증
            if(!(dan>=2 && dan<=9)) {// or if(dan<2||dan>9)
                 
                System.out.println("단은 2~9사이의 숫자입니다.");
                //현재 조건상의 명령을 종료하고 다음 제어식으로 이동
                continue;
            }    
                
                
            //정상코드    
            System.out.printf("---[%d]단 출력---\n", dan);
            
            for(int i=1;i<=9;i++) {//i=1, 2, 3,...,9
                
                System.out.printf("%d×%d=%d\n", dan,i,dan*i);
            }
            
            //계속할 지에 대한 여부
            System.out.print("계속 하시겠습니까?(y/n)");
            yn=scan.next();
            //yn="y" or "Y"
            //yn="n"
            //문자열 비교는 ==사용하면 안됨
            //=>yn.equals("y")사용
            
            //입력된 값이 "y" 또는 "Y"이면, do 문으로 이동
            
        }while(yn.equals("y")||yn.equals("Y")); 
        
        
        System.out.println("---End---");
 
    }
 
}
 
cs

이 프로그램의 실행결과(정상적인 단 입력)는 앞에서 했던 구구단과 같다. 

여기서 continue문은 단을 입력할 때 2~9 사이의 숫자가 아닌게 입력되면 "단은 2~9 사이의 숫자입니다"를 출력하고 다시 단을 입력하라는 명령으로 돌아가게 한다. 

반응형

'Coding(Java) > Java(이론)' 카테고리의 다른 글

[Java] 13. 클래스의 정의와 메소드  (0) 2021.09.02
[Java] 12. 다중반복문, break&continue label  (0) 2021.08.31
[Java] 10.while문  (0) 2021.08.25
[Java] 9. for문  (0) 2021.08.24
[Java] 8. switch문  (0) 2021.08.23
Posted by skywalker222