Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
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
Archives
Today
Total
관리 메뉴

개발자

[JAVA 9일차] 다중 for문/continue/구구단/레이블사용하여break/equalsIgnoreCase/별찍기/while문/do while문 본문

개발자/JAVA

[JAVA 9일차] 다중 for문/continue/구구단/레이블사용하여break/equalsIgnoreCase/별찍기/while문/do while문

GoGo개발 2022. 8. 16. 23:44
다중 for문 

 

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
 
        /*
              열
              1234567열
            abcdefg    1행
            hijklmn    2행
            opqrstu    3행
         
         */
 
        
        char ch = 'a';
        for(int i=0; i<'u'-'a'+1; i++) {
            System.out.print(ch++); //후위면 a먼저찍어주고 1 증가
            if ( (i+1)%7 == 0 ) {
                System.out.println("\n"); //7번째 일때 줄바꿈
            }
        }// end of for ----------------------
        
        
        System.out.println("\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
        
        ch = 'a'
        
        for(int i=0; i<3; i++) { // 바깥 for 문 ==> 행         3행
            
            for(int j=0; j<7; j++) { // 내부 for 문 ==> 열  7열
                System.out.print(ch++);
            }// end of for------------
            
            System.out.println("\n");
            
        }// end of for--------
cs

 

continie
for문 실행 중 continue를 만나면 아래로 내려가지않고 반복문의 증감식으로 이동하는 것이다.

 

<행 건너뛰기>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
/*
            [0,0][0,1][0,2]        4행 3열인데 3행은 하지 말고 건어띄어라 라고 하겠습니다.
            [1,0][1,1][1,2]
            [3,0][3,1][3,2]
        */
        
        for(int i=0; i<4; i++) {
            if(i==2continue//continue;를 만나면 아래로 내려가지 않고 반복분의 증감식으로 이동하는 것 (첫번째 for문의 i++ 로 이동)
            for(int j=0; j<3; j++) {
                System.out.print("["+i+","+j+"]");
            }// end of for---------------
            System.out.println("\n");
        }// end of for-----------------
cs

 

 

<열 건너뛰기>

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
            [0,0][0,2]        4행 3열 인데 2열은 하지말고 건너띄어라 라고 하겠습니다.
            [1,0][1,2]    
            [2,0][2,2]
            [3,0][3,2]
            
        */
        
        //내가한 코딩
        for(int i=0; i<4; i++) {
            for(int j=0; j<3; j++) {
                if(j==1continue;
                System.out.print("["+i+","+j+"]");
            }    
            System.out.println("\n");
        }
cs

 

구구단을 통해 레이블사용하여 break 하는 법과  equalsIgnoreCase 을 알아보자
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
 
        /*
             >>몇단 볼래? =? 8엔터
             
             ===8단===
             8*1=1
             8*2=16
             8*3=24
             8*4=32
             8*5=40
             8*6=48
             8*7=56
             8*8=64
             8*9=72
             
             >> 또 하시겠습니까?[Y/N] => y엔터 또는 Y엔터
             
             >> 몇단 볼래? => 1.34엔터 또는 똘똘이 엔터
             [경고] 2단부터 9단까지만 가능합니다. 
             
             >> 몇단 볼래? =>345엔터
             [경고] 2단부터 9단까지만 가능합니다. 
             
             >> 몇단 볼래? => 4엔터
             
             == 3단 ==
             3*1=3
             3*2=6
             3*3=9
             3*4=12
             3*5=15
             3*6=18
             3*7=21
             3*8=24
             3*9=27
          
            >> 또 하시겠습니까?[Y/N] => s엔터 또는 S엔터
            [경고] Y 또는 N만 가능합ㅈ니다.
            
            >> 또 하시겠습니까?[Y/N] => n엔터 또는 N엔터
            
            == 프로그램 종료 ==
         */
        
        Scanner sc = new Scanner(System.in);
        
        /*
          === 레이블을 사용하여 break; 하기 ==
                 레이블 명뒤에는 : 을 붙이며 반드시 반복문 앞에 써야한다.!!! 이름은 개발자 마음
         */
        outer: //oter: 을 레이블 이라고 부르는데 그 레이블명이 지금은 outer 일 뿐이다.
        for(;;) {
            
            try {
            System.out.print(">> 몇단 볼래? => ");
            
            String str_dan = sc.nextLine();
            
            int dan = Integer.parseInt(str_dan);
            
            if(2 <= dan && dan <= 9 ) {
                //입력받은 단을 출력해주기
                
                System.out.println("\n===" + dan+"단 ===");
                for(int i=0; i<9; i++) {
                    System.out.println(dan+"*"+(i+1)+"="+dan*(i+1));
                }// end of for------------------------
                
                for(;;) {
                    System.out.print("\n>> 또 하시겠습니까?[Y/N] => ");
                    String yn = sc.nextLine();
                    
                    //yn <== "y" 또는 "Y"
                    //if("y".equals(yn) || "Y".equals(yn)) 또는
                    if("y".equalsIgnoreCase(yn)) { //대소문자 구분없이 y이라면
                        break// break;를 만나면 break;와 가장 가까운 반복문을 빠져나오는 것이다.
                    }
                    
                    //yn <== "n" 또는 "N"
                    else if("n".equalsIgnoreCase(yn)) { //대소문자 구분없이 n이라면
                        sc.close();
                        break outer; // outer 라는 레이블명으로 선언되어진 for문을 빠져나가는 것이다.
                                     // outer 가 레이블명이다.
                    }
                    
                    //yn <== ("y" 또는 "Y" 또는 "n" 또는 "N")를 제외한 나머지인 경우
                    
                    else{System.out.println("[경고] Y또는 N만 가능합니다");
                    }
                }//end of for
            }    
            else {
                System.out.println("[경고] 2단부터 9단까지만 가능합니다.\n");
            }
            } catch(NumberFormatException e) {
                System.out.println("[경고] 2단부터 9단까지만 가능합니다.\n");
                
            }
                    
                    
                    
        }//end of for---------------
        
        
        //sc.close(); ,break out 있는 곳에 써주기 노란줄 생기니까
        System.out.println("==프로그램 종료==");
        
        
    }
cs
레이블을 사용하여 break; 하기 :  레이블 명뒤에는 : 을 붙이며 반드시 반복문 앞에 써야한다. 이름은 개발자 마음
사용 할때는 break 레이블명; 하게되면  레이블명으로 선언되어진 for문을 빠져나가는 것이다.
equalsIgnoreCase : 대,소문자 구분없이 비교해준다.

 

<구구단 정렬>

 

 

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
 
        /*
          == 구구단 ==
          2*1=2        3*1=3    4*1=4    ......... 9*1=9
          2*2=2        3*2=3    4*2=8    ......... 9*2=18
          2*3=2        3*3=3    4*3=12    ......... 9*3=27
          2*4=2        3*4=3    4*4=16    ......... 9*4=36
          2*5=2        3*5=3    4*5=20    ......... 9*5=45
          2*6=2        3*6=3    4*6=24    ......... 9*6=54
          2*7=2        3*7=3    4*7=28    ......... 9*7=63
          2*8=2        3*8=3    4*8=32    ......... 9*8=72
          2*9=2        3*9=3    4*9=36    ......... 9*9=81
          
         */
        
        // 위의 구구단은 9행 8열 이다.
        // row(행) => 줄, col(열) => 단
        
        System.out.println("== 구구단 ==\n");
        System.out.printf("%30s\n","== 구구단 =="); // "%30s" 자리에 "==구구단==" 넣는다.
        // %s는 문자열이 들어오는 것이다.
        // %30s는 문자열 30글자가 들어오게끔 공간을 확보하는 것이다.
        // 기본은 오른쪽 정렬로 들어온다.
        // _____________________== 구구단 == 30개중에 9개차지 21개 비워져있다 , 오른쪽 맞춤 (-붙이면 왼쪽맞)
        // 21개 공백"== 구구단 =="
        
        for(int row=1; row<=9; row++) { // 9행 
            
            for(int col=2; col<=9; col++) { // 8열
            //    System.out.print(col+"*"+row+"="+(col*row)+"\t");
                System.out.printf(col+"*"+row+"=%-4d", (col*row));
            //    %d는 정수가 들어오은 것이다. 참고로 %f는 실수가 들어오는 것이다.
            //  %-4d 는 정수 4자리가 들어오게끔 공간을 확보하는데 왼쪽정렬(-)로 들어오는 것이다.
                
            }// end of for-------------
            
            System.out.println("\n");
        }// end of for----------------
        
        
    } // end of main
cs

 

 

별 찍기 예시

 

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
    public static void main(String[] args) {
        /*
             == 입사문제 ==
             
             *********1
             ********2
             *******3
             ******4
             *****5
             ****6
             ***7
             **8
             *9
          
         */
        
       내가한 코딩
 
        int j=0;
        for(int i=1; i<=9; i++) {
            for(j=10-i; j>=1; j--) {
                System.out.print("*");    
                
            }
            System.out.print(j+i+"\n");    
            
        }
 
cs

 

while 문

 

 

1
2
3
4
5
6
7
8
9
10
11
 === while 문 형식 ===
    
         변수의 초기화;
         
         while(조건식) {
            조건식이 참(true)이라면 반복해서 실행할 명령문; 을 실행하고,
            조건식이 거짓(false)이라면 while 의 { } 부분을 빠져나간다.
            
            반복해서 실행할 명령문;
            증감식;
         }
cs

 

<예시>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void main(String[] args) {
        
        int cnt=5, loop=0;
        while(loop < cnt) { // 0<5  1<5  2<5  3<5   4<5   5<5(거짓)
            System.out.println((loop+1)+".안녕자바~~");
            loop++;        //  1    2    3    4    5
        }// end of while-----------------------------------
        
        /*
            1.안녕자바~~ 
            2.안녕자바~~ 
            3.안녕자바~~ 
            4.안녕자바~~ 
            5.안녕자바~~ 
        */
cs

 

 

<예시2>

 

1
2
3
4
5
6
7
System.out.println("\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
        
        cnt=5; loop=0;
        while(loop++ < cnt) { // 0<5  1<5  2<5  3<5   4<5   5<5(거짓)
            System.out.println(loop+".Hello Java~~");
        }// end of while-----------------------------------
        
cs

1.Hello Java~~~~ 5까지 나온다

 

<예시3>

 

1
2
3
4
5
loop=0;
        while(!(++loop > 5)) {
            // !( ) ==> 괄호( ) 속에는 while 반복문을 빠져나갈 조건식을 넣어준다.
            System.out.println(loop+".안녕 오라클~~");
        }// end of while--------------------------------
cs

 

<예시4 홀수만>

 

1
2
3
4
5
6
7
8
9
10
11
 
        loop=0;
        while(true) {
            if(++loop > 10// 탈출조건
                break;
            
            if(loop%2 == 0)
                continue// continue; 를 만나면 아래로 내려가지 않고 while() 의 괄호( )속의 조건식으로 이동한다. 
            
            System.out.println(loop+".Hi Oracle~~");
        }
cs

 

 

 

<구구단 예시>

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int jul=0, dan=1;
        
        while(!(++jul > 9)) { // 9행
        
           while(!(++dan > 9)) { // 8열
               String str = (dan<9)?"\t":"\n";
               System.out.print(dan+"*"+jul+"="+(dan*jul)+str);
            /*
                              == 구구단 ==
               2*1=2    3*1=3    4*1=4    .....    9*1=9 
               2*2=4    3*2=6    4*2=8    .....    9*2=18
               2*3=6    3*3=9    4*3=12    .....    9*3=27 
               2*4=8    3*4=12    4*4=16    .....    9*4=36
               2*5=10    3*5=15    4*5=20    .....    9*5=45 
               2*6=12    3*6=18    4*6=24    .....    9*6=54
               2*7=14    3*7=21    4*7=28    .....    9*7=63 
               2*8=16    3*8=24    4*8=32    .....    9*8=72
               2*9=18    3*9=27    4*9=36    .....    9*9=81
            */
           }// end of while-----------------
           
           dan=1;
           
        }// end of while--------------------
cs

 

do while 문

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
     === do ~ while() ===
         
         변수초기화;
         
         do {
              반복해서 실행할 명령문;
              증감식;
         } while(조건식);
         
         while 문의 경우 조건식이 true 일때만 반복 실행하지만,
         do ~while 문의 경우는 조건식이 false 일지라도 
         무조건 do { } 속에 있는 명령문은 1번은 실행하고서 반복문을 벗어난다.
         
         그러므로 do ~ while 문은 무조건 do { } 속에 있는 명령문을 실행하고서
 
cs

 

<팩토리얼 구하기>

 

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// == 입사문제 == //
        /*
         
              >> 알고싶은 팩토리얼 수 입력 => 5엔터
              >> 5! = 120
              
              
              >> 알고싶은 팩토리얼 수 입력 => 5엔터
              >> 5! => 5*4*3*2*1 => 120
              
              >> 또 할래?[Y/N] => y엔터
        
              
              >> 알고싶은 팩토리얼 수 입력 => 0엔터
              [경고] 자연수만 입력하세요!!
              
              >> 알고싶은 팩토리얼 수 입력 => 강아지엔터
              [경고] 자연수만 입력하세요!!
              
              >> 알고싶은 팩토리얼 수 입력 => 7엔터
              >> 7! => 7*6*5*4*3*2*1 => 5040
          
            == 프로그램 종료 ==
          
        */
        
        Scanner sc = new Scanner(System.in);
        
        outer: // 레이블 만들어주기 do while문 빠져나가기 위해서 이름 지어주기
        do {
            try {
                System.out.print(">> 알고싶은 팩토리얼 수 입력 => ");
                int num = Integer.parseInt(sc.nextLine());
                
                if(num <= 0) {
                    System.out.println("[경고] 자연수만 입력하세요!!\n");    
                }
                else {
                    
                    long result = 1;
                    String str = "";
                    
                    for(int i=num; i>0; i--) { // 5*4*3*2*1
                        //result = result * i; 아래와 같은말
                        result *= i;   // result = 1*5 = 5
                                               // result = 5*4; 
                                               // result = 5*4*3;
                                               // result = 5*4*3*2;
                                               // result = 5*4*3*2*1;
                        if(i>1
                            str += i+"*";
                        else
                            str += i;
                    }// end of for---------------
                    
                    System.out.println(num+"! => " +str + "=>" + result);
                    // >> 5! => 5*4*3*2*1 => 120
                    
                    do {
                        System.out.print("\n >> 또 할래?[Y/N] => ");
                        String yn = sc.nextLine();
                        
                        if("y".equalsIgnoreCase(yn)) { //  또 할래? 물었을 때 "y" "Y" 을 입력한 경우 
                            break// 이번 do while문 빠져나가는 것 다시 처음 do while 문으로 돌아감
                        }
                        else if("n".equalsIgnoreCase(yn)) { //  또 할래? 물었을 때 "n" "N" 을 입력한 경우 
                            break outer; //  가장 바깥의 do while문을 빠져나간다 
                        }
                        
                        else { // 또 할래? 물었을 때 "y" "Y" "n" "N" 을 제외한나머지를 입력한 경우 
                            System.out.println("[경고] Y 또는 N 만 입력하세요!!");
                        }
                    } while(true);
                    
                } // end of else (first)
                
            } catch(NumberFormatException e) {
                    System.out.println("[경고] 자연수만 입력하세요!!\n");
            }
        } while (true);
        // end of do~while--------------------------
        
        
        
        sc.close();
        System.out.println("\n==프로그램 종료 ==");
        
        
    }//end of main()--------------------------
cs

 

<내가 짠 코드>