반복문 while
while(조건){
..
}
=> db용 => 자료 수(탈출 조건) 몰라도 마지막 자료면 빠져나가도록 처리 (cf. for문은 i<=100 처럼 탈출 조건 지정돼있어야 함)
=> 무한루프 주의 / 조건이나 증감연산 실수로 입력 안 했을 시 계속 똑같은 값 반복
|
1
2
3
4
5
6
7
|
public static void main(String[] args) {
int i=1; //초기값
while(i<=10) { //조건
System.out.println(i);
i++; //증감연산
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
continue
- continue 실행시 그 다음 행으로 넘어가지 않고 다시 처음부터 반복문 수행
for (int i =1 ; i <= 10; i++) {
명령문1;
continue;
명령문2;
명령문3;}
for (int i =1 ; i <= 10; i++) {
if (i%2==0) {
continue; //짝수면 다음 행 실행하지 말고 처음으로 돌아가기
}
System.out.println(i);
}
//
1
3
5
7
9
break
|
1
2
3
4
5
6
7
|
public static void main(String[] args) {
for(int i=1; i<=10; i++) {
if (i==5) {
break; //i가 5되면 탈출
}
System.out.println(i);
}}}
|
cs |
중첩반복문
|
1
2
3
4
5
6
7
8
9
|
public static void main(String[] args) {
for (int i=1;i<=3;i++) { //아래 내용 3번 반복
for (int j=1;j<=5;j++) { //아래 내용 5번 반복
System.out.println("모두 파이팅!!!"); //3*5번 출력
}
}
}
}
|
cs |
라벨링
: 외부반복문을 라벨링할 시, 내부 반복문에서 탈출 시도할 때 외부 반복문까지 모두 탈출
|
1
2
3
4
5
6
7
8
9
10
11
|
public static void main(String[] args) {
Outer: for(int i=1;i<=5;i++) {
for (int j=1;j<=5;j++) {
System.out.println(i+" "+ j);
if (i*j==15) {
break Outer; //break문 실행으로 코드들 다 나감
}
}//내부
}//외부
System.out.println("프로그램 종료");
}
|
cs |
//
1 1
1 2
1 3
1 4
1 5
2 1
2 2
2 3
2 4
2 5
3 1
3 2
3 3
3 4
3 5
프로그램 종료
- 문제
3500이 넘으려면 1부터 몇까지 더해야 할까?
|
1
2
3
4
5
6
7
8
9
10
11
|
public static void main(String[] args) {
int sum = 0;
for (int i=1;i<=100;i++) {
sum+=i;
if (sum>3500) {
System.out.println("정답"+i);
break;
}
}
}
|
cs |
=>오류 답안
|
1
2
3
4
5
6
7
8
9
10
|
public static void main(String[] args) {
int sum = 0;
for (int i=1;i<=100;i++) {
sum+=i;
if (sum>3500) {
break;
}
}
System.out.println("정답"+i); //for 문 내에서만 int i 가 정의됐는데 for 밖이므로 오류
}
|
cs |
=>해결
|
1
2
3
4
5
6
7
8
9
10
11
|
public static void main(String[] args) {
int sum = 0;
int i;
for (i=1;i<=100;i++) {
sum+=i;
if (sum>3500) {
break;
}}//for문
System.out.println("정답"+i);
System.out.println(sum-i);
}
|
cs |
//
정답84
3486
int num = 20; //전역변수
{int age = 26;} //지역변수 (괄호 안에서만 정의됨)
System.out.println(num);System.out.println(age); //오류 (괄호 밖)
=>해결
int num = 20; //초기화
int age; //선언
{age = 26;}
System.out.println(num);
System.out.println(age);
- continue 사용 없이 홀수 출력
for (int i =1 ; i <= 10; i+=2) {
System.out.println(i);
}
//
1
3
5
7
9
- 문제 : 1~100 합 (3의 배수 제외)
|
1
2
3
4
5
6
7
8
9
10
|
public static void main(String[] args) {
int sum = 0;
for (int i =1;i<=100;i++) {
if (i%3==0) {
continue;
}
sum+=i;
}//for문 종료
System.out.println("1부터 100까지의 합= "+sum); //for문 밖이므로 반복X
}
|
cs |
//조건 i<=100 다 실행한 후 자동 탈출하므로 break 필요 없음
- 중첩반복문
|
1
2
3
4
5
6
7
|
public static void main(String[] args) {
for (int i=1;i<=3;i++) {
for (int j=1;j<=5;j++) { //j가 5 되어야 내부for 탈출 가능
System.out.println(i + ", " + j);
}
}
}
|
cs |
//
1, 1
1, 2
1, 3
1, 4
1, 5
2, 1
2, 2
2, 3
2, 4
2, 5
3, 1
3, 2
3, 3
3, 4
3, 5
=> 중첩반복문 작동 법 => 관련 문제에서 참고하기
- 중첩반복문
|
1
2
3
4
5
6
7
8
|
public static void main(String[] args) {
for (int i=1;i<=5;i++) {
for (int j=1;j<=5;j++) {
System.out.print("*");
}//내부for
System.out.println();
}//외부for
}
|
cs |
//
*****
*****
*****
*****
*****
- 문제
*
**
***
****
*****
만들기
=>답안
|
1
2
3
4
5
6
7
8
|
public static void main(String[] args) {
for (int i=1;i<=5;i++) {
for (int j=1;j<=i;j++) {
System.out.print("*");
}//내부for
System.out.println();
}//외부for
}
|
cs |
- 문제
*****
****
***
**
*
만들기
=>내 풀이
|
1
2
3
4
5
6
7
8
|
public static void main(String[] args) {
for (int i=1;i<=5;i++) {
for (int j=1;j<=6-i;j++) {
System.out.print("*");
}//내부for
System.out.println();
}//외부for
}
|
cs |
=>다른 풀이
|
1
2
3
4
5
6
7
8
9
|
public static void main(String[] args) {
for (int i=5;i>=1;i--) {
for (int j=1;j<=i;j++) {
System.out.print("*");
}//내부for
System.out.println();
}//외부for
}
|
cs |
- for문 밖 i
|
1
2
3
4
5
6
7
|
public static void main(String[] args) {
int i;
for (i=1;i<=10;i++) { //i가 10보다 커지면 for문 밖으로 나감
System.out.println("주말 잘 보내세요 "+i);
}//for끝
System.out.println("최종 i값? "+i);
}
|
cs |
//
주말 잘 보내세요 1
주말 잘 보내세요 2
주말 잘 보내세요 3
주말 잘 보내세요 4
주말 잘 보내세요 5
주말 잘 보내세요 6
주말 잘 보내세요 7
주말 잘 보내세요 8
주말 잘 보내세요 9
주말 잘 보내세요 10
최종 i값? 11
- 크리스마스 트리 문제
|
1
2
3
4
5
6
7
8
9
10
11
|
public static void main(String[] args) {
for (int i=1;i<=15;i++) {
for (int b=15;b>=i;b--) {
System.out.print(" ");
}
for (int j=1;j<=i*2-1;j++) {
System.out.print("*");
}//내부for
System.out.println();
}//외부for
}
|
cs |
//
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
*********************
***********************
*************************
***************************
*****************************
- 문제 (중첩 반복문)
돼지, 타조 각각 몇마리 있는지 구하기
총 17마리, 다리 총 56개
=>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public static void main(String[] args) {
int sum;
for (int pig=1;pig<=17;pig++) {
for (int ost=1;ost<=17;ost++) {
sum = ost*2+pig*4;
if(sum==56 && ost+pig==17) {
System.out.println("돼지 "+pig);
System.out.println("타조 "+ost);
}
}//내부
}//외부
}
|
cs |
//
돼지 11
타조 6
- 문제
구구단을 외우자
** 2 단 **
2 X 1 = 2
..
2 X 9 = 18
** 3 단 **
..
9 X 9 = 81
=>
|
1
2
3
4
5
6
7
8
9
10
11
|
public static void main(String[] args) {
System.out.println("구구단을 외우자");
for (int i=2;i<=9;i++) {
System.out.println("** "+i+" 단 **");
for (int j=1;j<=9;j++) {
System.out.println(i+" X "+j+" = "+i*j);
}//내부
System.out.println(" "); //j반복문 끝나면 한칸 띄우기
}//외부
}
|
cs |
- 문제 : 1~100 합 (for문이 편리한 문제지만 while문 도전)
|
1
2
3
4
5
6
7
8
9
|
public static void main(String[] args) {
int i=1;
int sum=0;
while(i<=100) { //3. 2<=100이므로 while문 들어가 반복
sum+=i; //1. i+sum=1+0=1
i++; //2. i+i=1+1=2
}
System.out.println(sum);
}
|
cs |
- 문제 : i*j 값이 15가 되면 반복문을 빠져나가시오
=>오류 풀이
|
1
2
3
4
5
6
7
8
9
|
public static void main(String[] args) {
for(int i=1;i<=5;i++) {
for (int j=1;j<=5;j++) {
if (i*j==15) {
break; //내부for에서만 벗어나 외부 for으로 돌아가게 됨
} }//내부
}//외부
System.out.println("프로그램 종료");
}
|
cs |
|
|
|
=> break는 다시 외부for로 돌아가 i=4 부터 반복하므로 3*5, 5*3 모두 실행함
=>답 : 라벨링 사용
|
1
2
3
4
5
6
7
8
9
10
11
12
|
public static void main(String[] args) {
Outer: for(int i=1;i<=5;i++) {
for (int j=1;j<=5;j++) {
System.out.println(i+" "+ j);
if (i*j==15) {
break Outer; //라벨링, break 실행으로 반복문 종료
}
}//내부
}//외부
System.out.println("프로그램 종료");
}
|
cs |
//
1 1
1 2
1 3
1 4
1 5
2 1
2 2
2 3
2 4
2 5
3 1
3 2
3 3
3 4
3 5
프로그램 종료
- 이전 예시에 라벨링 적용
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public static void main(String[] args) {
int sum;
Exit: for (int pig=1;pig<=17;pig++) {
for (int ost=1;ost<=17;ost++) {
sum = ost*2+pig*4;
System.out.println(pig+ " "+ost);
if(sum==56 && ost+pig==17) { //라벨링X => 답 찾아도 외부f로 나가 계속 계산
System.out.println("돼지 "+pig + "마리, 타조 " + ost + "마리");
break Exit;
}
}//내부
}//외부
}
|
//cs |
//
1 1
~
11 6
돼지 11마리, 타조 6마리
- 문제: 1~100 사이 숫자 맞추기 / 여러 차례 시도
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public static void main(String[] args) {
System.out.println("** 1~100 사이 숫자 맞추기 **");
int comNum= (int) (Math.random()*100)+1; //원래 랜덤은 소수로 나오므로 형변환
int count = 0; //몇 번 시도 후 맞췄는지
Scanner sc = new Scanner(System.in);
int myNum;
while(true) { //개발자가 조건에 true 넣음 -> 무한루프
System.out.print("숫자 입력>> ");
myNum = sc.nextInt();
count++;
if (myNum > comNum) {
System.out.println("당신의 숫자가 커요. 좀 더 작은 수를 넣어보세요");
} else if (myNum < comNum ) {
System.out.println("당신의 숫자가 작아요. 좀 더 큰 수를 넣어보세요");
} else {System.out.println("탈출하셨습니다."+ count);
break; //무한루프 탈출
}
}//while문
System.out.println("게임이 종료되었습니다.");
}
|
cs |
- 문제: 주사위
1. 콘솔로 사용자가 주사위 번호 입력하게 함
2. 5번째까지 시도 가능 (컴퓨터가 랜덤 숫자 맞춤)
=>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("행운의 숫자 입력>> ");
int myNum = sc.nextInt();
int count = 0;
int dice;
while (true) {
count++;
dice = (int) (Math.random()*6+1);
System.out.println(dice);
if (myNum==dice) {break;}
}//while문
if (count<=6) {
System.out.println("그래도 확률이 살아있군요");
} else {
System.out.println("확률이 바닥이군요");
}
}
|
cs |
//
행운의 숫자 입력>> 4 (내가 입력)
1
6
6
5
6
4
그래도 확률이 살아있군요
//복습 자체랑 복습글을 어떻게 해야 할지 고민을 많이 했는데, 대략
월 오전 11~2:30 전주 문풀
화~토 오전 11~2:30 복습
일 휴식
글
개념 및 문법
/
예시
식으로 해야겠다
내 목표: 논리 이해하고 코드 직접 만들기 => 10/30 => 3/30
'Programming > 국비학원' 카테고리의 다른 글
| 220426 - 정렬, 다차원 배열, 기타(운영체제 등) (0) | 2022.04.27 |
|---|---|
| 220425 - do while, 참조, 비트 이동 연산자, 삼항 연산자, 배열, 향상된 for문, 정렬 (0) | 2022.04.26 |
| 220421 - 연산자, 조건문, 반복문 (0) | 2022.04.22 |
| 220420 - 변수, 데이터타입, 형변환, 연산자 2 (0) | 2022.04.21 |
| 220420 - 변수, 데이터타입, 형변환, 연산자 1 (0) | 2022.04.21 |