1. For문

1. for문 기본실행

public static void main(String[] args) {
		int sum = 0;
		for(int i=1; i<=100; i++) {
			sum += i;
		}
		System.out.println(sum);
	}

* for문은 연속하는 수의 합을 구할 때도 많이 사용한다.

=> 이럴 때는 += 등의 증감연산자를 사용할 수 있다.

 

2. for문 안에서 정의된 변수는 로컬 변수(local variable)로, for문 밖으로 값을 갖고 나올 수 없다.

오류 예시!

public static void main(String[] args) {
		for(int i=1; i<=100; i++) {
			sum += i;
		}
		System.out.println(sum);
	}

* 이 코드는 실행시키면 오류가 난다.

: b/c sum 변수는 for문 안에서 정의되었는데, for문 바깥에서 사용하려고 하면 sum변수 값을 불러올 수 없다.

=> sum변수를 for문 밖에서도 사용하고 싶다면, for문이 시작하기 이전에, 즉 for문 밖에서 정의를 먼저 해 주면 된다.

 

3. for문 : 초기화식, 조건식, 증감식에 각각 두 개 이상의 변수 넣기

public static void main(String[] args) {
		int sum = 0;
		for(int i=1, j=100; i<=100 && j>=50 ; i++, j--) {
			sum = sum + i * j;
		}
		System.out.println(sum);
	}

* for문의 ()안에는 여러 변수들의 초기화식, 조건식, 증감식이 들어갈 수 있다.

* for (변수1 초기화식, 변수2 초기화식 ; 변수1 조건식 (&&/|) 변수2 조건식 ; 변수1 증감식, 변수2 증감식) 이렇게!

 

4. for문 변수로 float타입을 사용하지 않는 게 좋다.

그 이유는?

public static void main(String[] args) {
		for (float k = 0.1f ; k<=1 ; k+=0.1f) {
			System.out.println(k);
		}
	}

: 이론상 초기화식에서 k=0.1이고 0.1씩 더해서 1까지 실행하므로 10번을 실행하는 게 맞다.

하지만 for문은 9번 실행되었는데, 그 이유는 float는 부동 소수점을 사용하기 때문에 0.1을 정확하게 표현하지 못하고, 실제로는 0.1보다 조금 큰 값을 k에 더하게 된다. 그래서 9번만 실행된다.

 

5. 중첩 for문

: for문 안에 또 다른 for문을 쓸 수 있다. 중첩에 대해서 개수 제한은 없는 듯 하다.

중첩 for문을 이용해서 구구단을 작성해 보았다.

public static void main(String[] args) {
		for(int m=2 ; m<=9 ; m++) {
			System.out.println("*** " + m + "단 ***");
			for (int n=1 ; n<=9 ; n++) {
				System.out.println(m + "x" + n + "=" + (m*n));
			}
		}
	}

 

2. while문

while문과 for문은 기본적으로 같은 반복문이라서 for문으로 작성할 수 있는 코드는 while문으로도 작성할 수 있다.

다만 for문은 반복할 횟수만큼 반복시키는 경우가 많고, while문은 특정 조건에 해당할 때만 코드를 실행한다는 점에서 차이가 있다.

1. while문으로도 for문처럼 연속되는 숫자의 합을 구할 수 있다.

public static void main(String[] args) {
		int i=1; int sum = 0;
		while (i<=10) {
			sum += i;
			System.out.println(sum);
			i++;
		}
	}

 

2. while문은 해당 조건을 만족하면 실행문이 무한히 실행되어 루프가 발생할 수 있다. -> 주의!

public static void main(String[] args) {
		int i=3; int sum = 0;
		while (i>=2) {
			sum += i;
			System.out.println(sum);
			i++;
		}
	}

* i>=2 를 만족하면 while문은 계속 실행된다. 그런데 초기값이 i=3이고, i++으로 계속 i가 증가하므로 계속 이 조건을 만족하게 된다.

=> 이 경우 Terminate 버튼을 눌러서 강제 종료하지 않으면 무한히 실행된다.

 

+ while문에 딱히 작성할 조건이 없을 때?

-> while(true) 로 작성하고, 중간에 if() {break;} 를 작성하는 방법도 있다.

 

* for문과의 차이점-1

: while는 for문처럼 초기화식이 없기 때문에, 반복문에 넣을 변수를 while문 전에 미리 선언해 주어야 한다.

public static void main(String[] args) {
		int i=1; int sum = 0;
		while (i<=100) {
			sum += i;
			i++;
		}
		System.out.println(sum);
	}

-결과 : 5050

* for문과의 차이점-2

: while문은 for문처럼 증감식이 없다. 그래서 증감연산자를 어디에 배치하는지에 따라 결과값이 달라질 수 있다.

위의 식과 증감연산자의 위치만 다르게 해 보면, (증감연산자를 위에 배치)

public static void main(String[] args) {
		int i=1; int sum = 0;
		while (i<=100) {
			i++;
			sum += i;
		}
		System.out.println(sum);
	}

-결과 : 5150

* 중간에 i++ 처럼 증감문을 써 주지 않으면, 반복 변수의 값이 동일한 채 무한루프가 발생한다.

흔히 발생하는 실수이므로 주의!!

 

3. 반복문을 멈추는 또 다른 방법 : break;

break ; 는 for, while, do-while, switch문 등 다양한 구문에 사용할 수 있다.

break; 를 사용하면 반복문을 빠져나올 수 있다!

그러나 if() 을 사용해서, 어느 상황에 break;를 실행할지를 명시해 주어야 사용할 수 있다.

ex) 1부터 30까지의 합을 구하는데, 중간에 7과 3의 최소공배수를 만나면 반복문 빠져나오기

public static void main(String[] args) {
		int i=1; int sum=0;
		while(i<=30) {
			sum = sum + i;
			i++;
			if(i == 7*3) {
				break;
			}
		}
		System.out.println(i + " " + sum);
	}

 

4. while문과 비슷한 do-while문

: while문은 () 안의 조건이 참이면 그 다음에 실행문으로 넘어가지만,

do-while문은 do{} 안의 실행문을 먼저 실행하고, 그 다음에 while()의 조건이 맞는지 확인한다.

위와 같은 상황을 do-while문으로 코딩해 보았다.

public static void main(String[] args) {
		int i=1; int sum=0;
		do {
			sum += i;
			i++;
		}while(i!=7*3);
		System.out.println(sum);
	}

* 원래 while문과 비교해 보면,

while 안의 ()와 if() 부분의 조건절 부분은 전부 while 안의 ( ) 로 이동하고,

그 외의 '조건이 맞았을 때'의 실행문은 전부 do 안의 { } 로 이동한다.

 

5. 증감식의 경우, char 타입 변수도 사용 가능하다.

public static void main(String[] args) {
		for(char upper='A'; upper<='Z'; upper++) {
			for(char lower='a'; lower<='z'; lower++) {
				System.out.println(upper + "-" + lower);
			}
		}
	}
}

: for문의 경우, 초기식을 char변수의 알파벳으로 설정하고,

증감식에 ++를 표현했더니 알파벳 순서대로 A,B,C, ..., Z 까지 출력되는 것을 볼 수 있다.

 

6. continue : break;와 반대 역할

: 특정 조건을 만족했을 때만 결과를 실행한다.

public static void main(String[] args) {
		for(int i=1;i<=100;i++) {
			if(i%2 == 0) {
				continue;
			}
			System.out.println(i);
		}
	}

 

위의 경우, i%2!=0 인 경우에는 결과로 출력되지 않는다.

+ continue; 와 break; 모두 if() 안에 조건을 입력해야만 실행할 수 있다.

 

'server-side > JAVA' 카테고리의 다른 글

Chapter 4  (0) 2021.05.04

+ Recent posts