개발자 미니민의 개발스터디

9. for 문

by mini_min

◾ for 문은 (초기식 ; 조건식 ; 증감식) { 실행문 } 으로 구성된다.

1. 초기식 2. 조건식 3. 실행문 4. 증감식 5. 조건식 6. 실행문 ... 거짓이 될 때 까지 실행

int n;
for(n=1; n<=10; n++) { 

    System.out.print(n + "  ");

}

 

◾ for 문 안에서 선언한 변수는 for 문 밖에서 사용이 불가하다.

그러니 밖에서 변수 n 을 호출할 수 없다는 것이다.

// for 문장 안에서 선언한 변수는 for문 밖에서 사용 불가
for(int n=1; n<=10; n++) {
    System.out.print(n + "  ");

}
System.out.println();

 

◾ 반복 횟수에 사용된 변수 값을 변경할 때, 조건식을 주의해야한다.

int a;
for(a=1; a<=10; a++) {
    System.out.print(a + "  ");
    if(a%3==0) {
        a +=5; // 반복횟수에 사용된 변수 값을 변경하면 반복 횟수도 변한다. //8 에 a++ 해서 9값이 조건식에 들어감. 
    }
}
System.out.println("밖: " +a);

 

◾ for 문은 조건을 만족하지 않으면 한 번도 실행되지 않는다.

int n;
for(n=10; n<=1; n--) {
    System.out.println(n + "  ");	// 조건을 만족하지 않으면 한 번도 실행하지 않음.
}
System.out.println("\n밖: " + n);

 

◾ 1 ~ 100 까지 홀수의 합만 구하기

for문에서는 무한루프에 걸리지 않도록 주의해야한다.

int n,s;
s = 0;
for(n=1; n<=100 ; n+=2) {
    s += n;
}
System.out.println("결과 : " + s);

 

◾ for 문에서 변수 형을 float 으로 설정하면 정밀도가 낮아서 출력이 제대로 되지 않는다.

for 문의 반복 횟수로 float 형을 사용하면 안된다.

double 도 정밀도가 완전하진 않는다. 

int start = 2000000000;
int count = 0;

for(float f = start; f < start + 50; f++) {
    count++;

}
System.out.println(count);

// float 형 2000000050 는 2000000000 으로 저장. 정밀도가 낮아서 잘 출력되지 않음. 
// float 형을 for문의 반복 횟수로 사용하면 안된다.

double a = 0;
a +=4.7;
a +=.4; 	// 2진수로 바꿀 수 없어서 자름 ... 등... 
System.out.println(a == 5.1);	// false (double도 정밀도가 완전하진 않음.)
System.out.println(a);

 

◾ 다중 for 문 ! for 안에 변수는 같으면 에러난다.

가장 안에 있는 for 문이 2번 돌아가는데 

2번씩 3번 실행되어서 총 6개의 결과가 출력된다.

for(int i=1; i<=3; i++) {
    System.out.println("i : " + i);		//	3번 출력
    for(int j=1; j<=2; j++) {				// 6번 출력
        System.out.println("i: " + i + ", j: " + j);
    }

    System.out.println("-----");

}

 

◾ 2~9단 구구단 출력하기

// 2~9단 까지 구구단 출력하기
for(int i=2; i<=9 ; i++) {
    System.out.println("**" + i + "단 **");

    for(int j=1; j<=9; j++) {
        System.out.printf("%d * %d = %d\n", i, j, i*j);
    }

    System.out.println("-------------");

}

 

◾ 별 꺼꾸로 찍기

5자리가 있다고 치면 첫번째 줄은 자리 4개는 공백으로 채우고, 나머지 1자리는 별을 찍는다.

int s = 5;
for(int i=0; i<s; i++) {
    for(int j=s; j>0; j--) {
        System.out.print(j <= i+1 ? "*" : " ");
    }
    System.out.println();
}

 

◾ 트리 찍기 

핵심은 별이 홀수 갯수만큼 나온다는 것과 공백부터 찍는 다는 것 !!

/*

    * - 1
   *** - 3 
  ***** - 5
 ******* - 7
********* - 9 (홀수 갯수만큼의 별이 출력된다.)
     */


    for(int i=1; i<=5; i++) {
        for(int j=1; j<=5-i; j++) {
            System.out.print(" ");
        }
        for(int j=1; j<=2*i-1; j++) {	
            System.out.print("*");
        }

        System.out.println();

    }

 

◾ 퀴즈) 수를 입력 받아서 1부터 해당 수 만큼 합을 구하기

do while을 사용해서 do 안에 문장은 무조건 한 번 실행되도록 한다. 

입력받은 num 이 1 이하도 아니고 1000 이상도 아니기 때문에 바로 아래 for 문으로 내려가서 덧셈이 시작된다.

Scanner sc = new Scanner(System.in);

int n,s,num;
num = 0;
s = 0;

do {
    System.out.print("수 ? ");
    num = sc.nextInt();
    sc.close();
}while(num < 1 || num > 1000);

for(n=1; n<=num; n++) {
    s += n;
}


System.out.printf("1~%d까지 합 : %d", num, s);

 

◾ 정수 10개를 입력 받아서 가장 큰 값이 업데이트 되도록 한다.

Scanner sc = new Scanner(System.in);

int n;
int max;

System.out.print("10개의 정수를 입력하세요...");

max = 0; 
for(int i=0; i<10; i++) {
    n = sc.nextInt();	
    if(max < n) {
        max = n;
    }
}

 

 

 

'개발 공부중 > 📑 코드 복습' 카테고리의 다른 글

10. while 문  (0) 2023.02.24
* 연산 퀴즈  (0) 2023.02.23
8. switch case 문  (1) 2023.02.22
7. IF 제어문 + 퀴즈  (0) 2023.02.22
6. 연산자 - 퀴즈  (0) 2023.02.22

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기