본문 바로가기

JAVA

[JAVA] 반복문 for, while

반응형

주어진 조건을 만족하면 반복하는 명령문으로 [ for문, while문 ]이 있다.

for vs while 비교 

for문 
- N번, N회
- a부터 ~ b까지
- 범위가 분명하게 주어졌을때
- '배열'(자료구조) 
while
- 어떤(특정) 조건을 만족할때까지 계속
- ~~~할때까지 반복
- 무한하게, 영원히 
- 아주작은 경우라도 두번이상 수행한다면 while

while문

1
2
3
4
5
6
    int i =1;
    while (i<=3) {
        System.out.println("확인");
    i++;
    } //}를 절대로 통과할 수 없음! 
    // => 2번 라인의 조건식으로 간다! 
cs

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
package class03;
 
import java.util.Scanner;
 
public class Test05 {
    public static void main(String[] args) {
        
        Scanner sc= new Scanner(System.in);
        
        
        System.out.println("정수입력: ");
        int num=sc.nextInt();
        
        //소수 : 약수가 1과 자기자신밖에 없는 정수 
        // ex) 2,3,5,7,11,13,17...-> 약수의 개수가 2개인 정수
        // 1은 소수가 아닙니다. 
        
        int i =0;
        int cnt=0//약수의 개수를 기억할 변수가 필요! 
        while (i<num) {
            i++;
            if (num%i==0) {
                cnt++;
            }
        }
        
        if (cnt==2) {
            System.out.println("소수입니다.");
        }else {
            System.out.println("소수가아닙니다.");
        }
    }
}
cs

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
package class04;
 
import java.util.Scanner;
 
public class Test06 {
 
   public static void main(String[] args) {
      Scanner sc=new Scanner(System.in);
      
      //완전수 정의 : 자연수에서 그 수 이외의 약수의 합이 원래의 수가 되는 자연수
      
      System.out.print("정수입력: ");
      int num=sc.nextInt();
      
      int i=0;
      int total=0// 약수들을 저장하는 역할
      while(i<num-1) {
         i++;
         if(num%i==0) {
            total+=i;
         }         
      }
      System.out.println("total: "+total);
      
      if(total==num) {
         System.out.println("완전수");
      }
      else {
         System.out.println("완전수아님");
      }
   }
 
}
cs

여기서 잠시 반복문에서 자주 쓰이는 break & continue에 대해서 설명해보자면, 

 break : 즉시 반복문을 탈출하는 명령어

continue : 이하코드는 실행하지 않고, 즉시 반복문의 시작지점(조건식)으로 이동

                  for 문의 경우에는 증감식으로 이동! 


하기 문제는 while의 무한루프를 멈추는 break문을 사용하여

카페 메뉴판에 알맞은 메뉴를 입력하여 출력해주는 문제이다. 

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
package class05;
 
import java.util.Scanner;
 
public class Test07 {
 
    // while: 횟수를 모를때
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
 
        int num = 0//scope★
        while (true) { // 유효성검사 / 횟수제한이 없기때문에 while이 더 유리하다
            System.out.println("===========");
            System.out.println("   메뉴판    ");
            System.out.println("===========");
            System.out.println("1. 아메리카노");
            System.out.println("2. 카페라떼  ");
            System.out.println("3. 프라푸치노");
            System.out.println("4. 자몽허니블랙티");
            System.out.print("입력)      ");
            num = sc.nextInt();
 
            if (1 <= num && num <= 4) {// 종료조건
                break// 30번라인으로 "바로 즉시" 이동!
            }
            System.out.println("잘못입력하였습니다!");
        }
 
        String menu = "";
        if (num == 1) {
            menu = "아메리카노";
        } else if (num == 2) {
            menu = "카페라떼";
        } else if (num == 3) {
            menu = "프라푸치노";
        } else if (num == 4) {
            menu = "자허블";
        }
        System.out.println(menu + " 나왔습니다!");
 
    }
}
cs

 

 


for문

1
2
3
for(초기식;조건식;증감식) {
         수행할 문장;
      }
cs

for문을 활용하여 1~1000 값중에 완전수 출력하기

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
package class07;
 
public class Test10 {
 
   public static void main(String[] args) {
       
       //1~1000중에서 완전수 찾기 
       //1. 약수의 총합 -> sum
       //2. 약수가 될 변수 -> j
      
      for(int i=1;i<=1000;i++) {
         
         int sum=0;
         for(int j=1;j<i;j++) {
            if(i%j==0) {
               sum+=j;
            }
         }
         
         if(sum==i) {
            System.out.println(i);
         }
         
      }   
 
   }
 
}
cs

for문을 활용하여 입력한 2가지 정수의 최대공약수, 최소공배수 구하기

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
package class01;
 
import java.util.Scanner;
 
public class Test01 {
    
    public static void main(String[] args) {
        
        Scanner sc= new Scanner(System.in);
        System.out.println("정수 : ");
        int a=sc.nextInt();
        System.out.println("정수 : ");
        int b=sc.nextInt();
        
        //교환알고리즘 , a값이 항상 작다는걸 보장
        if (a>b) {
            int tmp=a;
            a=b;
            b=tmp;
        }
        int i;
        for (i = a; i >=1; i--) {
            if (a%i==0 && b%1==0) {
                break;
            }
        }
        System.out.println(a + "와" + b+"의");
        System.out.println("최대공약수는 " +i+"이고,");
        System.out.println("최소공배수는 " + (a*b/i)+"입니다");
    }
 
}
 
cs

 

 

 

반응형