반응형
주어진 조건을 만족하면 반복하는 명령문으로 [ 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 |
반응형
'JAVA' 카테고리의 다른 글
[JAVA] 배열 이진탐색/이분검색(Binary Search) 알고리즘 (0) | 2022.06.15 |
---|---|
[JAVA] 배열 버블정렬(Bubble Sort) 알고리즘 (0) | 2022.06.15 |
[JAVA] 배열 최대값, 최소값 구하기 알고리즘 (0) | 2022.06.14 |
[JAVA] 재귀함수 - Stack overflow 오류 (0) | 2022.06.14 |
[JAVA] 조건문 if, Switch (0) | 2022.06.13 |