Java

[Java] For 문, 예제

Rosie_dev 2021. 1. 13. 20:12

For 문


for(초기화;조건식;증감식) {         

        실행할 문장;

}

 

조건에 해당하는만큼 수행되는 반복문이다. for( ; ; ) 와 같이 무한반복문으로 쓰일 수 있다.

+=      ++        +      의 연산자들이 조건문 사이에서 어떤 식으로 적용되는지 알고 자유롭게 사용할 수 있어야 한다.

+= 와 ++는 다음 연산에 이어서 영향을 미친다. 대입의 개념을 포함하고 있기 때문이다. 초기값이 0 일 때, 출력값에 적용되는 i는 0이고 이후에는 증감식에 따른다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
for(int i=0; i<10; i+=1) {   
System.out.println((i+1)+". 안녕 JAVA~");
}
        
for(int i=0; i<10; i++) {
System.out.println(++i+". 안녕이클립스~");
}
        
for(int i=0; i<10; i++) {
System.out.println(i++ +". 안녕이클립스~");
}
        
for(int i=0; i<10; i+=2) {
System.out.println((i+1+". 안녕Eclipes~");
}
        
for(int i=0, j=0; i<10; i++,j+=2) {
System.out.println((j+1+". 안녕오라클~");
}
 
for(int i=10; i>0; i--) {
if(i%2 != 0)
System.out.println(i+". 안녕Spring~");
}
cs

 

/*

1) 라인 값은 1~10까지 출력된다.

5) 라인 값은 홀수 값으로 1,3,5,7,9 가 출력된다.

9) 라인 값은 짝수 값으로 0,2,4,6,8 이 출력된다.

     후위연산자가 출력 값에 있으므로 입력받은 초기값 0 을 먼저 출력하고 이후에 1 을 가산하여 조건식에 올린다.

     그리고 증감식에 의해 2 가 되어 다시 먼저 2 부터 출력

13) 라인 값은 홀수 값으로 1,3,5,7,9 가 출력된다.

       처음에 i 값이 0 이고 출력 값에 1 을 더하므로 1 이고, 이후 증가가 2 씩 되므로, 출력값에 2+1 이 되서 3 으로 출력된다.

17) 라인 값은 i 에 따라 10번 반복하고 j 값이 1 부터 시작해서 홀수값으로 10 개 출력된다.

21) 라인 값은 2로 나눈 나머지가 0이 아니라면 출력하고 있으므로 홀수 값으로 9 부터 역으로 출력된다.

*/

 

break; 와  continue;

 

for 문 내 if 문과 같이 쓰인 break; 는 if 문 조건에 해당하면 반복을 멈춘다는 의미이다.  

for 문 내 if 문과 같이 쓰인 continue; 는 if 문 조건에 해당하면 이하 문장을 실행하지 않고 다시 반복문으로 돌아가 증감식을 실시한다. 

 

1
2
3
4
5
6
7
8
9
10
for(;;) {
System.out.println(++cnt+"번째반복");
if(cnt==5break;
}
 
for(int i=0; i<10; i++) {
if((i+1)%2 == 0
continue;  
System.out.print(i+1+" ");  //1 3 5 7 9 
}
cs
 
 
 

예제1 - 회원가입  조건 적용하기


모든 경우의 수를 고려하기

 

먼저 입력받을 아이디, 비밀번호, 성명은 모두 입력되어야 하고, 비밀번호는 8~15 자리 수로 이루어진 영문자, 숫자, 특수문자를 혼용한 문자열이어야 한다. 따라서 각 조건에 해당하지 않는 값을 입력하는 경우, 경고 문구를 출력하는 코드를 작성해야 한다.

 

 

1.  비밀번호를 검사하는 메서드

 

참이면 값을 입력받고, 거짓이면 경고문구로 대신 하고자 하므로 메서드는 boolean 타입으로 작성한다. 먼저 비밀번호 자리 수 충족여부를 확인하고 충족하는 경우에는 Character.isAlphabetic, Character.isDigit, 그 외 else 값이 모두 true 인 경우를 확인한다. 

이 때, 각 자리의 index 값을 확인하기 위해 char ch = pwd.charAt(i); 을 활용한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Boolean checkPwd(String pwd) {
 
        boolean alphabetFlag = false, numFlag = false, sepcialFlag = false;
        
        int length = pwd.length();  //입력받은 비밀번호 문자열의 길이
        if(8 <= length && length <=15) {
            for (int i=0; i<length; i++) {
                char ch = pwd.charAt(i);
                if (Character.isAlphabetic(ch)) {  //int타입에 char타입 쓰면 자동형변환 발생
                    alphabetFlag = true;                    
                } else if (Character.isDigit(ch)) {  
                    numFlag = true;    
                } else
                    sepcialFlag = true;                    
            }//end of for--------------------------------------------
            
            if(alphabetFlag && numFlag && sepcialFlag) {
                return true;
            } else return false;
        }
        else { //글자 길이가 8글자 이상 15글자 이하가 아닌 경우
            return false;
        }
cs

 

2. 그 외 모든 경우의 수를 고려

 

값이 입력되어야 하고 그 글자가 1개 이상이어야 하므로, null 값과 .length( ) 값이 0 인 것을 제외한다. 이 때, null 포인트 값을 제외하지 않아 NullPointerException 발생을 방지해야 한다. 물론 이클립스 입력시에는 엔터로 값이 기본적으로 " " 으로 입력된다.

 

1
2
3
4
5
if (mbr.id != null && mbr.id.length()>0 && 
            mbr.pwd != null && 
            mbr.name != null && mbr.name.length()>0) {
            System.out.println("== 회원가입 성공!! ==");
        } else System.out.println("== 회원가입 실패!! ==");
cs

 

예제2 - 문자열 내 대소문자, 숫자, 특수문자 수 파악하기


index 값의 비교를 위해 단어의 문자를 순서대로 ch에 대입하여 조건식에서 어떤 문자에 해당하는지 확인한다. 각 문자수에 해당하는 변수를 설정해서 upperCnt++; 와 같이 후위증감연산자로 카운팅한다.

 

1
2
3
4
5
6
7
8
9
10
11
for (int i=0; i<word.length(); i++) {
            char ch = word.charAt(i);
            
            if(Character.isUpperCase(ch)) {  //대문자인지 검사
                upperCnt++;
            } else if(Character.isLowerCase(ch)) {  //소문자인지 검사
                lowerCnt++;
            } else if(Character.isDigit(ch)) {  //숫자인지 검사
                digitCnt++;
            } else simbolCnt++;  //특수문자인지 검사
        }
cs

 

 

예제3 - 누적 계산식  출력하기


1+2+3+4+5+6+7+8+9+10=55 와 같이 출력하고자 하는 경우
9 까지의 값은 뒤에 + 기호가 붙을 수 있도록 출력하고 else 의 값인 10 은 10 만 출력되도록 한다.

 

1
2
3
4
5
6
7
8
9
sum = 0;
String str = "";
for (int i=1; i<=10; i++) {
if(i<10) str+=i+"+";  //문자열의 결합
else str+=i;
sum+=i;
}

System.out.println(str+"="+sum);
cs

 

 

예제4 - 입력받은 정수로 누적 계산식  출력하기


시작 정수로 1, 끝 정수로 10 을 입력받았을 때, 1+2+3+4+5+6+7+8+9+10=55 와 같이 출력하고자 하는 경우 

 

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
package my.day06.a.FOR;
 
import java.util.Scanner;
 
public class Sum2Main2 {
 
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        
        int sum = 0;   //누적의 합을 저장하는 변수로써 0으로 초기화
        String str =""//누적되어질 숫자와 +를 문자열로 결합해서 저장하는 변수로서 ""으로 초기화    
        
        System.out.print("누적해야할 시작 숫자 => ");
        int startNo = Integer.parseInt(sc.nextLine());
        System.out.print("누적해야할 마지막 숫자 => ");
        int endNo =Integer.parseInt(sc.nextLine());
        
        for (;;) {   //무한반복문
            try {
                int cnt = endNo-startNo+1;
                    
                for (int i=0, j=startNo; i<cnt; i++,j++) {
                    if(j<cnt)    str += j+"+";
                    else str+=j;
                    
                    sum+=j;
                }
                break;
                
            //경우의 수를 따져서 오류 제어하기                
            } catch (NumberFormatException e) {
                System.out.println("\n>> 정수만 입력하세요!! <<");
                //다시 반복입력할 수 있게 하는 방법 => 무한반복문
            sc.close();    
            }    
        }
    
    //1+2+3+4+5+6+7+8+9+10=55
    
    System.out.print(str+"="+sum);
            
    sc.close();    
    System.out.println("\n>> 프로그램종료 <<");    
    }//end of main
 
}
 
cs
댓글