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 7일차] for문/trim/isEmpty/isdigit/유효성검사(숫자,오류횟수,비밀번호) 본문

개발자/JAVA

[java 7일차] for문/trim/isEmpty/isdigit/유효성검사(숫자,오류횟수,비밀번호)

GoGo개발 2022. 8. 15. 21:41
for 문

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    ==== 반복분(loop) ====
    
    ※ for 문의 형식
    
    for(초기화; 조건식; 증감식) {
        반복해서 실행할 문장;
    } //end of for--------------------------
    
    ▣ 순서
    1) 초기화;
    2) 조건식; (조건식이 참(true)이라면 반복해서 실행할 문장;을 실행하고서 } 을 못빠져나간다.         
                              조건식이 거짓(false)이라면 반복해서 실행할 문장;을 실행하지 않고
               } 을 빠져나간다.)
    3) 증감식
    4) 조건식; (조건식이 참(true)이라면 반복해서 실행할 문장;을 실행하고서 } 을 못빠져나간다.         
                              조건식이 거짓(false)이라면 반복해서 실행할 문장;을 실행하지 않고
               } 을 빠져나간다.) 
    5) 증감식
    6) 조건식; (조건식이 참(true)이라면 반복해서 실행할 문장;을 실행하고서 } 을 못빠져나간다.         
                              조건식이 거짓(false)이라면 반복해서 실행할 문장;을 실행하지 않고
               } 을 빠져나간다.)  
cs

 

<for문 예제1>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for(int i=0; i<10; i++) { // i+=1;은 i=i+1; 와 같다.
            System.out.println((i+1)+".안녕자바~~"); //i가 int타입이라 +이다. i+1 =1나옴
        }
        
        /*
           1.안녕자바~~
           2.안녕자바~~
           3.안녕자바~~
           4.안녕자바~~
           5.안녕자바~~
           6.안녕자바~~
           7.안녕자바~~
           8.안녕자바~~
           9.안녕자바~~
           10.안녕자바~~
            
         */
cs

 

 

<for문 예제 2 홀수만 나오게>

 

1
2
3
4
5
6
7
8
9
10
11
12
for(int i=0; i<10; i++) {
            System.out.println(+++ ".안녕 이클립스~~");
        }
        
        /*
           1.안녕 이클립스~~          
           3.안녕 이클립스~~
           5.안녕 이클립스~~
           7.안녕 이클립스~~
           9.안녕 이클립스~~
            
         */
cs

 

<위의 예제 다른 방법>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
for(int i=0; i<10; i+=2) { //i+=2; 는 i=i+2 와 같다.
            System.out.println((i+1)+".안녕 Eclipse~~");
        }
        
 
        
        /*
           1.안녕 Eclipse~~          
           3.안녕 Eclipse~~
           5.안녕 Eclipse~~
           7.안녕 Eclipse~~
           9.안녕 Eclipse~~
            
         */
cs

 

<for문 예제3>

 

1
2
3
4
5
6
7
8
9
10
11
12
 
         for(int i=10; i<0; i--) {
             if(i%2 !=0// i%2는 i를 2로 나누었을때의 나머지를 구해주는 것이다.
             System.out.println(i+".안녕 Spring~~");
         }
           
         /*9.안녕 Spring~~          
           7.안녕 Spring~~
           5.안녕 Spring~~
           3.안녕 Spring~~
           1.안녕 Spring~~
         */
cs

 

<위의 예제 다른 방법들>

 

1
2
3
4
5
6
7
8
9
10
for(int i=10; i>0; i-=2) {
             System.out.println((i-1)+".안녕하십니까?");
         }
         /*
           9.안녕하십니까?
           7.안녕하십니까?
           5.안녕하십니까?
           3.안녕하십니까?
           1.안녕하십니까?
         */
cs

 

 

1
2
3
4
5
6
7
8
9
10
 for(int i=10; i>0; i--) {
             System.out.println(--i+".Hello~~");
         }
         /*
           9.Hello~~
           7.Hello~~
           5.Hello~~
           3.Hello~~
           1.Hello~~
         */
cs

 

 

1
2
3
4
5
6
7
8
9
10
for(int i=0, j=9; i<5; i++, j-=2) {
             System.out.println(j+".헬로~~~");
         }
         /*
           9.헬로~~~~~
           7.안녕하십니까?
           5.안녕하십니까?
           3.안녕하십니까?
           1.안녕하십니까?
         */
cs

 

1
2
3
for(int i=9; i>0; i-=2) {
             System.out.println(i+".안녕 Spring~~");  // 내가코딩한거 9,7,5,3,1
         }
cs

 

for문 break

 

반복문에서 break;를 만나면 가장 가까운 반복문을 벗어나는 것이다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
for(int i=0; i<10; i++) {
             if(i==5) {
                 break//반복문에서 break;를 만나면 가장 가까운 반복문을 벗어나는 것이다.
             }
             System.out.println(i+1);
         } // end of for--------------------- 
/*
>>> 1. break <<<
1
2
3
4
5
*/
cs

 

<for(;;)은 무한반복> : unreachable code는 for문 빠져나오지 못함 for문 조건없어서

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 for(;;) {
             System.out.println(++cnt + "번째 반복"); //cnt++ 후이면 0번쨰부터 반복
             if(cnt == 10) {
                 break;     // 반복문에서 break;를 만나면 가장 가까운 반복문을 벗어나는 것이다. 10이라면 빠져나와라
                } // {}하나만있으면 생략가능
         }// end of for-------------------------
/*
1번째 반복
2번째 반복
3번째 반복
4번째 반복
5번째 반복
6번째 반복
7번째 반복
8번째 반복
9번째 반복
10번째 반복
*/
 
cs

 

for문 continue

 

continue; 를 만나면 실행순서가 밑으로 내려가지 않고 가장 가까운 반복문의 증감식으로 이동시켜준다

 

1
2
3
4
5
6
7
8
9
 System.out.println("\n>>> 2. continue <<<"); //unreachable code는 for문 빠져나오지 못함 for문 조건없어서
         
         for(int i=0; i<10; i++) {
             if( (i+1)%2 == 0 ) { //출력하고자 하는 값이 짝수 이라면 
                 continue;         // continue; 를 만나면 실행순서가 밑으로 내려가지 않고 가장 가까운 반복문의 증감식으로 이동시켜준다.
             }
             System.out.print( (i+1)+" " );
         }// end of for-----------------
          // 1 3 5 7 9 
cs

 

trim/ isEmpty()

 

trim() : 입력된 문자열중 좌,우에 공백이 있으면 공백을 모두 제거되어진 문자열을 나타내준다
 
isEmpty() : 문자열의 길이가 0이면 true, 아니라면 false를 리턴해준다
1
2
3
4
5
6
7
8
9
10
String hakbun = sc.nextLine();
            
            System.out.println("hakbun =>" + hakbun.trim().isEmpty());
            hakbun.trim() 은 hakbun 에 입력된 문자열중 좌,우에 공백이 있으면 공백을 모두 제거되어진 문자열을 나타내는 것이다.
            hakbun.trim().isEmpty()은 hakbun에 입력된 문자열에서 좌우에 공백을 제거한 이후에 아무것도 없는 것이라면 true 를 나타내어주고, 
                                     뭔가 들어온 경우라면 false를 나타내어주는 것이다.
            
            if(hakbun.trim().isEmpty()) {// hakbun.trim().isEmpty()값이 true이면 학번 입력시 그냥 엔터했거나 아니면 공백만을 입력한 경우이다.
                System.out.println("[경고] 학번을 올바르게 입력하세요!!\n");
            }
cs

함께쓰면 

객체.trim().isEmpty()  성명에 그냥 엔터나 공백만으로 입력한 경우

 

< 숫자인지 유효성 검사 메소드>

 

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
    //학번이 6글자로 이루어진 숫자인지 아닌지를 검사해주는 메소드-----------------------------
    boolean checkHaKbun(String hakbun) {
        
        int hakbun_length = hakbun.length(); //haknun은 nill값이아니다 위에서 입력받은 값이 있기 때문이다
        
        if ( hakbun_length !=6 ) {
            return false;
        }
        else { //학번의 길이가 6인 경우
            // "091234" "0a1234"
            boolean is_all_digit = true;
            
            for(int i=0; i<6; i++) { 
                char ch = hakbun.charAt(i); //입력된 hakbun 중 한글자만 받아온다 i만?
                if ( !Character.isDigit(ch)) {// 입력받은게 숫자입니까 -> !쓰면 반대로 입력받은게 숫자가 아닙니까?  digit맞는지 확인좀 Define이라 되어있었음
                    is_all_digit = false
                    break
                    //return false;              //!false = !Character.isDefined(ch) = break;?
                    
                }
                
            }//end of for--------------------
            
            return is_all_digit; //초기치 넘겨주지 true값
                    
        }        
    }//end of checkHaKbun(String hakbun)-----------------------
cs

 

Character.isDigit() : 명시된  char 값이 숫자이면 true 아니면 false를 리턴한다
Character.isUpperCase : 대문자 인지
Character.isLowerCase : 소문자 인지

 

<오류횟수 3회초과 유효성검사>

 

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
int kor_fail_cnt = 0// 국어점수 입력시 틀린 횟수 용도
        
        for(;;) {
         if(kor_fail_cnt < 3) { //국어점수 입력시 틀린 횟수가 3 미만 이라면
            
         try {
                System.out.print("3. 국어점수 :");
                    
                int kor = Integer.parseInt(sc.nextLine().trim()); //int kor = sc.nextInt();  sc.nextLine();  되나보기
                //키보드로 입력한 문자열에서 좌,우에 공백이 있을 경우라면 좌,우 공백을 제거한 이후에 int 타입으로변경해주겠다는 말이다.
                
                
                //입력받은 점수가 0이상 100 이하인지 아닌지 검사를 해야한다.
                if(0<= kor && kor<=100) { //int이지만 벗어난 숫자일때 떨어지는곳
                this.kor=kor;
                break;
                }   
                 else //else 있어도 없어도 그만
                     System.out.println("[경고] 점수는 0 이상 100 이하 이어야 합니다!");
                    System.out.println">>> "+ ++kor_fail_cnt + "번 틀림!!"); //같이쓰면 중요 전위,후위 ++
                    
         } catch(NumberFormatException e) { //int 아닐때 떨어지는곳
                System.out.println("[경고] 점수는 정수로만 입력하세요!!\n");
                System.out.println">>>"+ ++kor_fail_cnt + "번 틀림!!");
                                    //전위는 후위든 상관없음 하지만다른거랑 같이쓰면 중요함    
                
           }// end of catch    --------    
            
                
         }//end of fail if
         else {
             System.out.println(">> 국어점수 입력이 3회 이상 틀렸으므로 프로그램을 종료합니다. <<");
             System.exit(0); //프로그램 종료
         }//end of else
         
        }// end of for------
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
// 암호는 대문자,소문사,숫자,특수기호가 혼합된 8글자 이상 15글자 이하인지 아닌지 검사를 해주는 메소드 생성하기
    // 파라미터 String pwd 값이 대문자,소문사,숫자,특수기호가 혼합된 8글자 이상 15글자 이하이라면 true 를 리턴해주고,
    // 파라미터 String pwd 값이 위의 조건에 만족하지 않으면 false를 리턴해주겠다.
    public static boolean checkPwd(String pwd) {
        
         //boolean result = false; 필요없어짐
        
        //입력받은 String pwd의 글자수 알아오기
        //System.out.println("입력받은 암호 길이 : " + pwd.length());
        
        boolean upperFlag = false;   // 대문자인지 기록하는 용도
        boolean lowerFlag = false;   // 소문자인지 기록하는 용도
        boolean digitFlag = false;     // 숫자인지 기록하는 용도    
        boolean specaialFlag = false;// 특수기호인지 인지 기록하는 용도    
        
        int pwd_length = pwd.length(); // 비밀번호의 글자수
        
        if( pwd_length < 8 || pwd_length > 15) {
            return false;
        }
        else { // 비밀번호의 글자수가 8글자 이상 15글자 이하인 경우
               //암호가 어떤글자로 이루어졌는지 검사를 시도해야 한다.
 
            // pwd   ==> "qwEr1234$"
            // index ==> "012345678"
            for(int i=0; i<pwd_length; i++) { //입력받은 글자의 길이 만큼 검사를 해야 한다. qwEr1234$넣으면 9번반복 할거임
                
                char ch = pwd.charAt(i); //입력된 pwd 중 한글자만 받아온다 i만?
                
                if( Character.isUpperCase(ch)) { //대문자라면
                    upperFlag = true//true라는 흔적남기기
                }
                else if( Character.isLowerCase(ch)) {//소문자라면 
                    lowerFlag = true// true라고 기록남기기
                }
                else if( Character.isDigit(ch)) { //숫자이라면
                    digitFlag = true;
                }
                else { // 특수문자인 경우
                    specaialFlag = true;
                }
            }//end of for---------------------------
            
            if ( upperFlag && lowerFlag && digitFlag && specaialFlag ) {
                 return true
            }
            else {
                 return false;
            }
            
        }//end of else--------------
        // return result; //boolean checkPwd(String pwd) 메소드의 리턴값 어디갔지???
        
    }// end of boolean checkPwd(String pwd)---------------------
cs