특정 수 만큼 반복
for을 배우기 전에 코드 반복을 할 수 있을까?
있다.
while문을 이용하여 억지스럽지만 for 반복문처럼 사용할 수 있는데 아래 성적 출력 코드에서 국어1의 점수를 3번 반복 출력되도록 만들어보자면
// 앞서 입력 부분에서 int kor1,kor2,kor3의 값을 입력 받았다 가정해보자
int i=0; //초기값을 0으로 설정(그래야 아래 3이라는 숫자만큼 반복가능)
total = kor1 + kor2 + kor3;
avg = total / 3.0f;
System.out.println("┌──────────────────────────────────────┐");
System.out.println("│ 성적출력 │");
System.out.println("└──────────────────────────────────────┘");
while( i<3 ){
//일부러 참이 오도록 함. index를 의미하는 i를 두고 3번 반복하기 위해 <3을 입력
System.out.printf("\t국어1 : %3d\n", kor1);
i++//i값이 변하지 않으면 계속 참으로 무한 루프를 돌게되니 반복 될 때마다 i를 1씩 ++해준다.
}
System.out.printf("\t총점 : %3d\n", total);
System.out.printf("\t평균 : %6.2f\n", avg);
System.out.println("──────────────────────────────────────");
하지만 위 처럼 만들경우 int i=0;, i<3, i++; 이 한눈에 보여야 반복이 몇번 되는지 알 수 있는데 코드를 작성하다보면 저 사이사이 많은 코드가 들어가면 한눈에 알아보기 힘들게 된다.
그래서 이런 인위적인 조작을 사용해야 할 때 저 3개의 코드를 한번에 모아놓는 형태의 제어문이 있으면 좋겠다라는 생각으로 등장한 것이 for문
for(int i=0; i<3; i++){
printf("hello\n");
............
훨씬 한눈에 보기 편하고 빠르게 판단 할 수 있다.(가독성이 좋아진다.)
for문은 특정 수만큼 반복을 요할 때 쓰게되는 반복문이다.(while은 조건이 맞을 때 반복하는 반복문)
위 코드에선 국어 1의 성적만 3번 출력했는데 국어 1,2,3 순으로 차례대로 출력하고 싶다면
// 앞서 입력 부분에서 int kor1,kor2,kor3의 값을 입력 받았다 가정해보자
int i=0; //초기값을 0으로 설정(그래야 아래 3이라는 숫자만큼 반복가능)
total = kor1 + kor2 + kor3;
avg = total / 3.0f;
System.out.println("┌──────────────────────────────────────┐");
System.out.println("│ 성적출력 │");
System.out.println("└──────────────────────────────────────┘");
while( i<3 ){
//일부러 참이 오도록 함. index를 의미하는 i를 두고 3번 반복하기 위해 <3을 입력
System.out.printf("\t국어%d : %3d\n",i+1 ,kor1);
i++//i값이 변하지 않으면 계속 참으로 무한 루프를 돌게되니 반복 될 때마다 i를 1씩 ++해준다.
}
System.out.printf("\t총점 : %3d\n", total);
System.out.printf("\t평균 : %6.2f\n", avg);
System.out.println("──────────────────────────────────────");
국어 1<- 숫자 자리에 반복되는 i를 넣는다.
이 때 i=0부터라 0,1,2 이렇게 되기 때문에 i+1을 만들어 1,2,3으로 출력되도록 한다.
i=0;이 아닌 i=1;(n=1;으로 쓰는 것이 좋다)로 하는 것도 가능하지만 for() 괄호 안쪽이 변경되는 것은 없게 수정하는 것이 베스트
3,2,1 역순으로 나오게 하는 것도 for() 괄호안을 건드리지 않고 i -> 3-i 로 변경하면 된다.
주의
for(;i<3;){} 조건식만 있고 앞과 뒤가 없지만 오류가 나지 않는다.
이유는 while문을 할 때처럼 int i=0;은 밖에 i++구문 안에 선언해도 되기 때문이다.
for(;true;){} <- while문의 true와 똑같다.(무한루프)
for(;;){} 위의 for(;true;){}와 같은 뜻(무한루프)
-위의 for 무한루프는 while루프가 가능하니 바람직하지 않음
for(int x=0, int y=0; x<0; x++,y=x){}//쉼표를 이용하여 2개를 사용할 수도 있다.
//x는 인덱스로 사용하고 y는 x값을 이용한 또다른 연산을 위해 안쪽구문으로 사용할 수도 있다.