Programming Language/JAVA (2) - 혼공자
[Java 혼자 공부하는 자바] for문, while문, do-while문, break문, continue문
나수비니
2023. 9. 23. 01:20
728x90
핵심 키워드
- for 문, while문, do-while문, break문, continue문
핵심 포인트
- 반복문
- for, while, do-while
- 반복문은 제어문 처음으로 되돌아가 반복실행 ⇒ **루핑(loopng)**이라고 한다.
- 어떤 작업을 반복적으로 실행하고 싶을 때 사용
for문
- 주어진 횟수 만큼 반복 횟수를 알고 있을 때 주로 사용
for ( 초기화식; 조건식; 증감식) {
int sum = 0;
for (int i=1; i<=100; i++) {
sum = sum+i;
}
System.out.println("1~100의 합:" + sum);
🟡 코드 뜯기
- int i =1
- 반복을 1부터 하겠다.
- i < = 100
- i가 100 이하일 때 까지 반복하겠다.
- i++
- 한 번 씩 반복할 때마다 i가 얼만큼 증가할건지?
1부터 10까지 증가
package sec02.exam01;
public class ForPrintFrom1To10Examp {
public static void main(String[] args) {
for(int i =1; i<=10; i++) {
System.out.println(i);
}
}
}
1부터 100까지 증가
//1부터 100까지 합 구하기 for
package sec02.exam02;
public class ForSumFrom1To100Example {
public static void main(String[] args) {
int sum = 0; //합을 저장할 sum 이라는 변수 저장하고, 0 저장
for (int i = 1; i<=100; i++) {
sum += i; // sum 이라는 변수에 복합대입연산자 사용해서 i라는 변수를 계속 누적
}
System.out.println("1~100합" + sum );
}
}
🔺 문제점
- int sum = 0; //합을 저장할 sum 이라는 변수 저장하고, 0 저장
- 합을 구해야하기에 합을 나타낼 변수 설정을 안 했다. 바로 for문을 작성해 버렸다.
- for (int i = 1; i<=100; i++) { sum += i;
- for 문은 잘 작성을 했으나, sum += i;를 작성을 안 했다.
- 왜? .. sum 이라는 변수에 복합대입연산자를 사용해서 i라는 변수를 계속 누적해줘야한다.
- for 문은 잘 작성을 했으나, sum += i;를 작성을 안 했다.
- 출력값
- “1~100합: 5050”이 정답인데, 난 아래 사진처럼 뜬다.
- 절대 챗GPT 돌리지 말고 혼자 답 찾아낼 것 지금 당장.
- 해결 → 어처구니없는 실수를 했다. System.***out***.println("1~100의 합:" + sum);를 for문 중괄호 안에 입력했다.
- "1~100합"
- 100 자리에 ‘i’ 변수를 사용할 수 없을지? → 컴파일 오류가 발생함.

잘못 작성된 for문의 예시
//잘못 작성된 for 문의 예시
package sec02.exam04;
public class ForFloatCounterExample {
public static void main(String[] args) {
for(float x=0.1f; x<=1.0f; x+=0.1f) {
//x가 한 번씩 반복될 때마다 x에 0.1f를 추가하고 1.0f가 되면 종료
//0.7부터는 x가 0.7보다 큰 수 되어버림
//0.9000001 이후에는 x가 1보다 커져버림
//그래서 10번이 아닌 9번만 반복됨
//for문 작성 시 정수타입으로 선언할 것.
System.out.println(x);
}
}
}
🟡 코드 뜯기
- x가 1회씩 반복될 때 마다, x에 0.1f를 더해라 → x가 1.0f가 되면 종료해라
- 0.7부터는 x가 0.7보다 큰 수가 됨 → 0.9000001 이후에는 x가 1보다 커짐 ⇒ 9회 반복
- 왜? ⇒ x에 0.1이 추가될 때 정확히 0.1이 더해지는 것이 아님
- for문 작성 시, 정수 타입으로 선언할 것
중첩 for문
package sec02.exam05;
public class ForMultiplicationTableExample {
public static void main(String[] args) {
for (int m=2; m<=9; m++) {
System.out.println("*** " + m + "단 ***");
//m=2은 2인데.1회씩 반복될 때 마다 m에 1씩 더해라
//m이 0보다 작아지면 중지해라 -> 말이 됨? 양수에서 1을 더하는데 어떻게 음수가 돼?
for (int n=1; n<=9; n++) {
System.out.println( m + " x " + + n + " = " + (m*n));
// n은 1인데, 1회씩 반복될 때마다 1씩 더해라. n이 9가 되면 종료해라
}
}
}
}
- 중첩 for문
- for문은 또 다른 for문을 내포할 수 있다.
🟡 코드 뜯기
- for (int m=2; m<=0; m++) {
- m은 2이다, m이 9 이하일 때까지 반복, 1회씩 반복될 때 마다, m에 1을 더해라
- for (int n=1; n<=9; n++) {
- n은 1이다, n이 9 이하일 때까지 반복, 1회씩 반복될 때 마다, n에 1을 더해라
- 바깥쪽 for문&중첩 for문의 기능
- 바깥쪽 for문: m이 2~9까지 변하면서 8번 반복 실행
- 바깥쪽의 for문이 1번 실행될 때 → 중첩 for문: n은 1~9까지 변하면서 9번 반복 실행
- 즉, m=2일 때 n은 1~9까지 변하면서 2 x n = 2*n을 출력
🔺 문제점
- m이 0보다 작아지면 중지 → m은 2로 시작했고, 반복될 때 마다 1을 더하라고 했는데 0보다 작아질 수가 있나?
- 9를 0으로 착각했다.. 눈이 멀어가나? 밤을 새지말자..
while문
- 조건에 따라 반복할 때
package sec02.exam06;
public class WhilePrintFrom1To10Example {
public static void main(String[] args) {
int i = 1;
while(i<=10) {
System.out.println(i);
i++;
}
}
}
package sec02.exam07;
public class WhileSumFrom1To100Example {
public static void main(String[] args) {
int sum = 0;
int i = 1;
while(sum<=100) {
sum += 101;
i++;
}
System.out.println("1~" + (i-1) + " 합: " + sum );
}
}
package sec02.exam08;
public class BreakExample {
public static void main(String[] args) {
while(true) {
int num = (int)(Math.random()*6) + 1;
System.out.println(num);
if(num == 6) {
break;
}
}
System.out.println("프로그램 종료");
}
}
package sec02.exam09;
public class BreakOutterExample {
public static void main(String[] args) {
Outter:
for(char upper='A'; upper<='Z'; upper++) {
for(char lower='a'; lower<='z'; lower++) {
System.out.println(upper + "-" + lower);
if(lower == 'g') {
break Outter;
//A가 Z가 될 때까지 1씩 더해라
//a가 z가 될 때까지 1씩 더해라
//출력해라
//만약 lower가 g가 되면 빠져나와라
//중첩 for문이니까.. A가 1번 실행할 때
//중첩 for 문은 a~z까지 실행되니까
//A에서 g까지 갔을때만 출력되는 것임
}
}
}
}
}
Continue문
- for, While, do-while문에서만 사용
- for문의 증감식이나 while, do-while 문의 조건식으로 사용
- 주로 if문과 함께 사용
- Continue문 예제
package sec02.exam10;
public class CountinueExample {
public static void main(String[] args) {
for(int i=1; i<=10; i++) {
if(i%2 != 0) {
continue;
}
System.out.println(i);
}
}
}
//i는 1이고, 1씩 더해서 10이 될때까지 반복해라
//i를 2로 나눴을 때 0이 아니면 돌아가라
//1%2 0이아니니까 돌아가
//2%2 0이니까 출력해
💡 인사이트
- 수만가지의 논리 구조가 떠오르는데 이를 깔끔하게 적절한 문법을 사용해서 코드로 구현해내는 것
- 재능이 필요한 영역인가 익숙해지면 되는건가
- 일단 몸에 체화시키는 게 중요한 것 같다
- 한 번 보고 내 나름대로 따라칠 수 있으면 가능성 걸어봐도 되나
- 고작 for문 코드 안 보고 쳐보겠다고 혼자 골머리 앓았다. 의욕도 식어버린다. 나 왜 이러냐
- 그냥, 안 되면 되게 해..