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 |
---|