반응형
제어문 - 반복문 (for 문, while문)
- 프로그램 수행 흐름을 바꾸는 역할을 하는 제어문 중 하나로 특정 문장들을 반복해서 수행하도록한다.
- 대부분 특정 조건이 만족되는 동안 반복을 시행한다.
- 반복문의 종류 : for문(반복횟수를 알 때 적합), while문(반복횟수를 모를 때)
for문
for(초기식; 조건식; 증감식;){
수행될 문장;
}
● 1부터 10까지 1씩 증가시키면서 (10번) i 값을 출력하는 기본 반복문
for(int i = 1; i <= 10; i++){
System.out.println(i + "출력");
}
● 실행결과
1 출력
2 출력
...
9 출력
10 출력
1회전
초기식 확인 후 조건식 확인
조건식이 true면 문장 수행
(1회전 조건식 i는 1이기 때문에 true -> 1 출력 문장 수행)
조건식이 false면 수행하지 않음
2회전
증감식 연산 후 조건식 확인
조건식이 true면 문장 수행
(증감식 연산 후 i값은 2이기 때문에 true => 2출력 문장수행)
조건식이 false면 수행하지 않음
* 2회전 이상부터는 모두 2회전과 동일하고, 조건식이 false가 나올 때까지 문장 주행
( 증감식 연산 후 11이되면 i <= 10의 조건에 맞지 않기 때문에 false => 반복문을 빠져나와 종료됨)
for문 예제
- 1 ~ 10까지의 합계를 구하시오
int sum = 0; 결과를 누적시켜 담아줄 변수 선언
for(int i = 1; i <= 10; i++){
sum += i;
}
System.out.println("sum : " + sum);
}
● 실행 결과
sum = 55
- 5~10 사이의 난수를 발생시켜서 1에서부터 발생한 난수까지의 합계를 구해보자
int random = (int) (Math.random() * 6) + 5;
int sum = 0;
for(int i = 1; i <= random; i++) {
sum += i;
}
System.out.println("1부터 " + random + "까지의 합계는 " + sum + "입니다.");
}
● 실행 결과
1부터 5까지의 합계는 15입니다.
- 숫자 두 개를 입력 받아 작은 수에서 큰 수까지의 합계를 구하세요. 단, 두 숫자는 같은 숫자를 입력하지 않는다는 가정으로 해결해본다.
Scanner sc = new Scanner(System.in);
System.out.print("첫 번째 정수 입력 : ");
int first = sc.nextInt();
System.out.print("두 번째 정수 입력 : ");
int second = sc.nextInt();
int sum = 0;
● first와 second 중 어느 것이 더 큰 수인지 확인하면
작은 수에서 시작해서 큰 수까지의 합계를 구하는 반복문을 작성할 수 있다.
int max = 0;
int min = 0;
if(first > second) {
max = first;
min = second;
} else {
max = second;
min = first;
}
for(int i = min; i <= max; i++) {
sum += i;
}
System.out.println(min + "부터 " + max + "까지의 합은 " + sum + "입니다.");
}
● 실행 결과
첫 번째 정수 입력 : 1
두 번째 정수 입력 : 2
1부터 2까지의 합은 3입니다.
- 키보드로 정수 값을 입력 받아 2~9 사이의 값인 경우 해당 단의 구구단을 출력하고, 그렇지 않은 경우 "반드시 2~9 사이의 양수를 입력해야 합니다." 출력해보자.
Scanner sc = new Scanner(System.in);
System.out.print("출력할 구구단의 단 수를 입력하세요 : ");
int dan = sc.nextInt();
● 입력한 숫자가 2~9 사이인지 조건 확인
if(dan >= 2 && dan <= 9) {
for(int su = 1; su <= 9; su++) {
System.out.println(dan + " * " + su + " = " + (dan * su));
}
} else {
System.out.println("반드시 2~9 사이의 양수를 입력해야 합니다.");
}
● 실행 결과
출력할 구구단의 단 수를 입력하세요 : 5
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
중첩 for문
for(초기값 1; 조건식1; 증감식1){
수행될 문장1;
for(초기값2; 조건식2; 증강식2){
수행될 문장2;
}
수행될 문장3;
}
● for문에 진입하면 수행 될 문장1을 먼저 수행하고 두 번째 for문에 진입하면
조건식2가 false가 될 때 까지 수행 될 문장2를 수행 한다.
● 조건식2가 false가 되어 반복문을 빠져나오면 수행 될 문장3을 수행하고
조건식1로 돌아와 true면 다시 반복을 한다.
반응형
중첩for문 예제
- 2 단부터 단을 1씩 증가시키는 반복문
for(int dan = 2; dan < 10; dan++) {
System.out.println("========== " + dan + "단 ==========");
● 단이 1개씩 증가하는 동안 수행할 내용은 해당 단의 구구단을 출력하는 것
for(int su = 1; su < 10; su++) {
System.out.println(dan + " * " + su + " = " + (dan * su));
}
● 실행 결과
========== 2단 ==========
2 * 1 = 2
2 * 2 = 4
....
9 * 8 = 72
9 * 9 = 81
- 키보드로 입력 받은 정수만큼 행으로 별을 출력하는 메소드
Scanner sc = new Scanner(System.in);
System.out.print("출력할 행 수를 입력하세요 : ");
int row = sc.nextInt();
● 입력한 행만큼 반복
for(int i = 1; i <= row; i++) {
● 별을 5개 출력하는 것을 반복
for(int j = 1; j < 6; j++) {
System.out.print("*");
}
● 한 행에 대해서 별을 출력하고 난 뒤 줄바꿈
System.out.print();
}
● 실행 결과
출력할 행 수를 입력하세요 : 2
*****
*****
● 키보드로 입력 받은 정수 행만큼 별을 삼각형 모양으로 출력해보자.
Scanner sc = new Scanner(System.in);
System.out.print("출력할 줄 수를 입력하세요 : ");
int row = sc.nextInt();
● 입력한 행만큼 반복
for(int i = 1; i <= row; i++){
● 행의 수만큼만 별을 출력하는 반복문
for(int j = 1; j <= i; j++){
System.out.print("*");
}
System.out.println();
}
● 실행 결과
출력할 줄 수를 입력하세요 : 3
*
**
***
while 문
while(조건식) {
수행될 문장;
[증감식 or 분기문];
}
- 조건식이 true일 때 반복문 진입하여 수행될 문장이 끝나면 조건식을 다시 확인한다. 조건식이 true면 반복문에 다시 진입하여 수행될 문장을 수행하고, 조건식 false가 될 때 까지 반복한다.
- {} 안에 조건을 벗어나게 할 연산(증감식, 분기문)필요
● 1부터 10까지 1씩 증가시키면서 i값을 출력하는 기본 반복문
int i = 1;
while(i <= 10) {
System.out.println(i + "출력");
i++;
}
● 실행 결과
1 출력
2 출력
....
9 출력
10 출력
whil문 예제
- 입력한 문자열의 인덱스를 이용하여 문자 하나씩 출력 해보자
Scanner sc = new Scanner(System.in);
System.out.print("문자열 입력 : ");
String str = sc.nextLine();
System.out.println("======while문======")
int index = 0;
while(index <str.length()){
char ch = str.charAt(index);
System.out,println(index + " : " + ch);
index++;
}
System.out.println("======for문======")
for(int i = 0; i < str.length(); i++){
char ch = str.charAt(i);
System.out.println(i + " : " + ch);
}
● 실행 결과
문자열 입력 : hello
========== while문 ==========
0 : h
1 : e
2 : l
3 : l
4 : o
========== for문 ==========
0 : h
1 : e
2 : l
3 : l
4 : o
- 정수 하나를 입력 받아 1부터 입력 받은 정수까지의 합계를 구하자
Scanner sc = new Scanner(System.in);
System.out.print("정수를 하나 입력하세요 : ");
int num = sx.nexInt();
int sum = 0;
int i = 1;
while(i <= num){
sum += i;
i++;
}
System.out.println("1부터 입력 받은 정수 " + num
+ " 까지의 합은 " + sum + " 입니다. ");
}
● 실행 결과
정수를 하나 입력하세요 : 2
1부터 입력 받은 정수 2까지의 합은 3입니다.
- 중첩 while문을 이용한 구구단 출력하기
int dan = 2;
while(dan < 10) {
int su = 1;
while(su < 10){
System.out.println(dan + " * " + su + " = " + (dan * su ));
su++;
}
dan++;
}
do ~ while문
do{
수행될 문장;
[증감식 or 분기문];
} while(조건식);
- do 안의 내용 먼저 실행, 조건식 확인 후 true면 문장 수행, false면 종료 , while 뒤에 ; 꼭 필요함.
- {} 안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요
- while과 do~whil의 차이점 : do ~while은 조건문이 true가 아니더라도 무조건 한 번 이상 수행!
- do ~ while문 예시
int i = 1;
do {
System.out.println (i + "출력");
i++;
} while(i <= 10);
● 실행 결과
1 출력
2 출력
...
9 출력
10 출력
do ~ while 문 예제
- 키보드로 문자열 입력 받아 반복적으로 출력한다. 단, exit가 입력 되면 반복문을 종료한다.
Scanner sc = new Scanner(System.in);
String str = " ";
do{
System.out.print("문자열을 입력하세요 : ");
str = sc.nextLine();
System.out.println("입력한 문자 : " + str);
문자열(참조 자료형)은 ==로 값 비교가 불가능하다.
String 클래스에서 제공하는 equals() 메소드를 통해 비교하기.
} while(!str.equals("exit"));
System.out.println("프로그램을 종료합니다.");
}
● 실행 결과
문자열을 입력하세요 : while
입력한 문자 : while
입력한 문자 : exit
프로그램을 종료합니다.
분기문
1 . break
- 반복문에서 break문은 자신이 포함 된 가장 가까운 반복문을 빠져나가는 구문이다.
- break문 예시 -
for(int i = 1;; i++) {
System.out.println(i + "출력");
if(i >= 10) {
beak;
}
}
- 중첩 반복문에서의 break
for(초기값1; 조건식1; 증감식1){
수행될 문장1;
for(초기값2; 조건식; 증감식2){
수행될 문장2;
break;
}
수행될 문장3;
[break;]
}
: 두 번째 for문에 break를 만날 경우 반복문을 나가 수행 될 문장3을 수행 후 다시 첫 번째 for문을 실행하지만, 마지막 break가 있다면 수행 될 문장3을 수행 후 for문을 완전히 빠져나감.
2 . continue
- 반복문 내에서만 사용 가능하며, 반복문 실행 시 continue 아래 부분은 실행하지 않고 반복문을 다시 실행한다. for문의 경우 증감식으로 이동, while(do~while)문의 경우 조건식으로 이동 전체 반복 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 유용하다.
- continue 문 예시
for(int i = 1; i <= 10; i++){
if(i % 2 == 0){
continue;
}
System.out.println(i + "출력");
}
● 실행결과
3출력
5출력
7출력
9출력
반응형