ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ch4 자바 반복문] for문 알아보기
    프로그래밍 언어/JAVA 2022. 6. 8. 11:43
    임의의 정수 만들기 Math.random()

    for문에 대해 알아보기 전 예시를 들어 어떤 방식인지 살펴보자.

    난수(임의의 수)를 얻기 위해서는 Math.random()을 사용해야 하는데, 이 메서드는 0.0과 1.0 사이의 범위에 속하는 하나의 double값을 반환한다. 0.0은 범위에 포함되고 1.0은 포함되지 않는다.

     

    0.0 <= Math.random() <1.0

    만일 1과 3 사이의 정수를 구하기를 원한다면, 다음과 같은 과정으로 난수를 구하는 식을 얻을 수 있다.

     

    1. 각 변에 3을 곱한다.
      0.0 * 3 <= Math.random() *3 <1.0 *3
      0.0 <= Math.random()*3 <3.0
    2. 각 변을 int형으로 변환한다.
      (int) 0.0 <= (int) Math.random()*3 < (int) 3.0
      0 <= (int) Math.random()*3 < 3

    3. 각 변에 1을 더한다.
      0 +1 <= (int) Math.random()*3 +1 < 3 + 1
      1 <= (int) Math.random()*3 +1  < 4

     

    ※ 예제 1번 ※

     

    package ch4;
    
    public class Ex4_7 {
    
    	public static void main(String[] args) {
    		
    		for(int i=0;i<5;i++) {
    			int random = (int)(Math.random()*5) +1; //1부터 5사이의 정수를 얻는 코드
    			System.out.println(random);
    		}
    
    	}
    
    }

    예제 1번 출력값
    예제 1번 출력값

    Math.random()을 사용했기에 실행할 때마다 실행결과가 달라진다. 

     

     

     

    for문 알아보기

    반복문은 어떤 작업이 반복적으로 수행되도록 할 때 사용되며, 반복문의 종류는 for문과 while문, 그리고 while문의 변형인 do-while문이 있다. for문과 while문은 구조와 기능이 유사하여 어느 경우에나 서로 변환이 가능하며, 반복 횟수를 알고 있을 때는 for문을, 그렇지 않을 때는 while을 사용한다.

     

    for( int i=1; i<=5; i++) { //1부터 5까지 i를 1씩 증가시킨다.
      System.out.println("I can do it.");
    }

    변수 i에 1을 저장한 다음, 매 반복마다 i의 값을 1씩 증가시킨다. 그러다가 i의 값이 5를 넘으면 조건식 'i<=5'가 거짓이 되어 반복을 마치게 된다. i의 값이 1부터 5까지 1씩 증가하니까 모두 5번 반복한다. 만일 10번 박복을 원한다면, 그저 5를 10으로 바꾸기만 하면 된다.

     

     

    for문의 구조와 수행순서

    for문은 아래와 같이 '초기화', '조건식', '증감식' , '블럭{ }' , 모두 4부분으로 이루어져 있으며, 조건식이 참인 동안 블럭{} 내의 문장들을 반복하다 거짓이 되면 반복문을 벗어난다. 

     

    for ( 초기화; 조건식; 증감식) {
    // 조건식이 true인 동안 실행될 문장들을 적는다.
    }

     

    제일먼저 초기화가 수행되고 그 이후부터는 조건식이 참인 동안 조건식 -> 수행될 문장 -> 증감식 순서로 반복된다. 그러다가 조건식이 거짓이 되면, for문 전체를 빠져나가게 된다. 

     

    ※ 예제 2번 ※

    package ch4;
    
    public class Ex4_8 {
    
    	public static void main(String[] args) {
    		
    		for(int i=0; i<5; i++) {
    			System.out.println("hello"+i);
    		}
    
    	}
    
    }

    예제 2번 출력 값

     

    < 초기화 >

    반복문에 사용될 변수를 초기화하는 부분이며 처음에 한번만 수행된다. 보통 변수 하나로 for문을 제어하지만, 둘 이상의 변수가 필요할 때는 아래와 같이 콤마 ','를 구분자로 변수를 초기화 하면 된다. 단) 두 변수의 타입은 같아야 한다.

    for ( int i=1; i<=10; i++) {,,,}
    for ( int i=1, j=1; i<=10; i++) {,,,}

     

    < 조건식>

    조건식의 값이 참(true)이면 반복을 계속하고, 거짓(false)이면 반복을 중단하고 for문을 벗어난다. for의 뜻이 '~하는 동안' 이므로 조건식이 '참인 동안'이므로 조건식이 '참인 동안' 반복을 계속한다고 생각하면 쉽다. 

    for ( int i=1; i<=10; i++) { ... } 

    조건식을 잘못 작성하면 블럭{} 내의 문장이 한 번도 수행되지 않거나 영원히 반복되는 무한반복에 빠지기 쉬우므로 주의해야한다. 

     

     

    <증감식>

    반복문을 제어하는 변수의 값을 증가 또는 감소시키는 식이다. 매 반복마다 변수의 값이 증감식에 의해 점진적으로 변하다가 결국 조건식이 거짓이 되어 for문을 벗어나게 된다. 변수의 값을 1씩 증가시키는 연산자 '++'이 증감식에 주로 사용되지만, 다음과 같이 다양한 연산자들로 증감식을 작성할 수도 있다.

    for ( int i=1; i<=10; i++) {} 
    for( int i=10; i>=1; i--) {}
    for(int i =1; i<=10; i+=2) {}
    for(int i=1; i<=10; i*=3) {}

     

    증감식도 물론 쉼표를 이용해 두 문장 이상을 하나로 연결해서 쓸 수 있다.

    for(int i=1, j=10; i<=10; i++, j--) {}

     

    지금까지 사려본 이 세가지 요소는 필요하지 않으면 생략할 수 있으며, 심지어 모두 생략하는 것도 가능하다.

    for(;;) {..} // 조건식이 참일 경우, true로 간주되어 무한 반복문이 된다. 대신 블럭 {} 안에 if문을 넣어 특정 조건을 만족하면 for문을 빠져나오게 해야한다.

     

     

    ※ 예제 3번 ※

    package ch4;
    
    public class Ex4_9 {
    
    	public static void main(String[] args) {
    		
    		int sum=0;
    		for(int i=1;i<=5;i++) {
    			sum+=i;
    			System.out.println("1부터" + i + "까지의 합 :" +sum);
    		}
    
    	}
    
    }

    예제 3번 출력 값

     

     

    중첩 for문

    for문 안에 다른 for문을 포함시키는 것이 가능하며, 이를 중첩 for문이라고 한다. 중첩 횟수는 거의 제한이 없다. 중첩 for문을 설명하기 위해 별찍기 예제를 알아보자.

     

    이렇게 10개씩 5줄로 별을 찍으려면 어떻게 해야할까?

    만약 for문을 모른다면 아래처럼 할 수 있겠다.

    sysout("**********");
    sysout("**********");
    sysout("**********");
    sysout("**********");
    sysout("**********");

     

    그러나 for문을 배웠다면 간단하게

    for(int i =0; i<5; i++){
    sysout("**********");
    }

     

    이렇게 표현할 수 있겠지만 sysout("**********"); 이 또한 반복되는 문자열이니 for문으로 바꿀 수 있다.

    for(int i=0; i<10; i++){
    sysout("*");
    }

     

    따라서 위에 문장 대신 아래처럼 중첩for문을 할용할 수 있다.

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

     

    ※ 예제 4번 ※

    package ch4;
    
    public class Ex4_10 {
    
    	public static void main(String[] args) {
    		
    		for(int i=0; i<5; i++) {
    			for(int j=0; j<=i; j++) {
    //			for(int j=0;j<5;j++) {
    //				if(i>=j)
    				System.out.printf("*");
    			}
    			System.out.println();
    		}
    
    	}
    
    }

    예제 4번 출력값

    중첩 for문에서 j의 조건식을 다르게 적어주면 된다!

    반응형

    댓글

Designed by Tistory.