JAVA 반목문

sung eon·2022년 5월 17일
0

JAVA

목록 보기
7/21

반복문

반복해서 처리해야 하는 것들을 로직을 한번만 만들어서 코드가 반복해서 실행하게 하는 것.
예) 100명 학생의 점수 평균을 구해야됨. 모두가 더한 다음에 학생 명수만큼 나눠야함
모두 다 더하는 경우는 그 element의 개수만큼 덧셈을 해야되고 나누기는 마지막에 한번.
이 때 더하는 부분을 반복문으로.

for / while 이 있는데 그중 먼저 for문

for 문

for (int i = 0; i < 10; i++) {

}

여기서 ; 왼쪽에 있는 건 초기화 블럭이다.

그래서 for문에 진입할 때 한 번 실행하는 구문을 써주게되는데,
1. i = 0을, int는 i라는 변수를 선언하고 0을 할당해준다.
2. i < 10; 은 조건문인데 이 반복문을 이 괄호 안이 참일 때 수행하게 된다.
3. i++는 한번 수행이 된 다음에 그 다음 조건을 체크하러 오기전에 수행해 줄 구문을 입려하면 된다. 이 경우에는 1을 더하는 ++를.

int sum = 0;
for (int i=0; i<10; i++) {
	sum += (i + 1);
}
System.out.println(sum);

프린트하면

55

55 가 출력되는 이유는 반복문을 돌면서 나온 i가 0부터 9까지, sum으로 치면 1부터 10까지 더한 값이 55!
처음에 i=0을 넣어서 실행하면 for문에서 참이니까 실행, 또 sum이 1이 되어도 for문에서 참이니까 실행, 실행, 실행...
i가 9가 될 때 까지 계속 반복하다가 i가 10이 되면 false가 되니까 for문을 돌려지지않고 바로 프린트된다.

사람은

int sum = 0;
for (int i=0; i<=10; i++) {
	sum += (i);
}
System.out.println(sum);

이렇게 생각할수도 있는데 컴퓨터가 받아들이기에는 처음 예제의 방식이 더 좋다.

for each

배열이나 collection, 즉 어떤 것의 나열들이 있는 변수가 있을 때 그걸로 반복문을 쉽게 짤 수 있는 형태

public class Main {
    public static void main(String[] args) {
				String[] days = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};

	for (String day: days) { //여기서 days는 String의 배열이다.
    	System.out.println(day);
    }
  }
}

String day는 배열에 있는 String 값을 하나씩 꺼내서 String type의 day변수에 할당해 줄게, 그리고 한 번씩 실행시켜 줄게. 라는 뜻이다.

그래서 실행하면,

Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

가 출력된다.
그래서 이렇게 배열이 있는 경우에는 이렇게 하면 3개의 구문을 for문안에 넣어야 했는데 ( for ( i i i ))
이거는 type이랑 이름만 선언하고 : 하고, 배열 변수만 넣어주면 되니까 더 간결하다.

while

int i = 0;
int sum = 0;
while (i < 10) { //조건이 하나만 온다. 여기선 i<10
    sum += i + 1;
    i += 1; //같은 표현으로는 i++;
}
System.out.println(sum);

실행하면,

55

그런데 여기서 만약 i++를 빼버린채 출력하면,

int i = 0;
int sum = 0;
while (i < 10) { //조건이 하나만 온다. 여기선 i<10
    sum += (i + 1);
}
System.out.println(sum);

무한루프에 빠진다. i는 계속해서 0이니까 계속 sum에다가 조건을 확인하면 계속 10보다 작으니까 while을 무한 수행을 하게된다.

while 중간에 빠져나오고 싶을 때
break를 사용하자!

int i = 0;
int sum = 0;
while (i < 10) { 
    sum += (i + 1);
    i += 1;
  	if(i == 5) { //i가 5면 
    	break; 
    }
}
System.out.println(sum);

프린트하면,

15

여기서 break는 나를 감싸고 있는 반복 조건을 하나, 즉 조건의 중괄호 블럭을 벗어날 거야. 라는 의미다. 따라서 i=5됐을 때 빠져나와서 프린트 되어 15를 찍어준 것.
근데 그러면 처음부터 while < 6으로 하면되지않을까?

여.기.서! 내가 만약 1부터 10까지 더하는데, 5만 빼고 더하고싶어! 는?
우선 i==5를 i==4로 바꾸고 if~ break 를 위로 올려준 후, break 대신에 continue를 넣는다. 그리고 그위에 i++

int i = 0;
int sum = 0;
while (i < 10) { 
	if(i == 4) {
    	i++;
    	continue; 
    }
    sum += (i + 1);
    i++;
}
System.out.println(sum);

i가 4일 때 if 안의 것을 수행해줘 그러면 i == 5가되고, 그다음 continue(나를 감싸고 있는 반복문 블럭 밑에를 한번 skip하고 그 다음 확인해 라는 의미)
그래서 i==4일 떄는 if문 아래를 실행하지 않는다. 그래서 i가 4일 때 sum += (i + 1)은 결국 sum += (5)가 되고, 이것을 실행하지 않아서 5가 빠지게 된다. 그리고 if문안에 i++로 인해, 무한루프를 벗어난다.

do while

while 문은 조건을 먼저 확인하는데, 조건을 확인하지 않고 수행부터 먼저 하는 문

int i = 0;
int sum = 0;
do {
    sum += (i + 1);
    i++;
} while (i < 10);
System.out.println(sum);

일단 do를 실행하고, while의 조건이 맞으면 다시 do로 가서 실행해줘.

55출력.

profile
코베베

0개의 댓글