ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 012. 실행 흐름의 컨트롤(제어문) for문 중첩(별 찍기), break, continue, skip,return 실습, 변수와 메소드의 스코프
    SsY/Class 2023. 2. 26. 22:55
    728x90

    2023.02.09 (목)

    실행 흐름의 컨트롤 (제어문)
    - 반복문(for문) 중첩 실습 (별찍기)
    • Test061~064 (과제)
      - 반복문(for문) 중첩 실습 (별찍기)

          왼쪽부터 차례로 Test 061, Test062, Test063, Test064    

    • Test061
    더보기
    public class Test061
    {
    	public static void main(String[] args)
    	{
    		for (int j=4; j>=0; j--)
    		{
    			for (int i=0; i<5; i++)
    			{
    				if (i>=j)
    					System.out.print("*");
    				else
    					System.out.print(" "); 
    			}
    			System.out.println();
    		}
    	}
    }
    • Test062
    더보기
    public class Test062
    {
    	public static void main(String[] args)
    	{
    		for (int i=0; i<5; i++)
    		{
    			for (int j=0; j<5+i; j++)
    			{
    				if (j<=3-i)
    					System.out.print(" ");
    				else
    					System.out.print("*");
    			}
    			System.out.println();
    		}
    	}
    }
    • Test063
    더보기
    public class Test063
    {
    	public static void main(String[] args)
    	{
    		for (int i=0; i<5; i++)
    		{
    			for (int j=0; j<9-i; j++)
    			{
    				if (i>j)
    					System.out.print(" ");
    				else
    					System.out.print("*");
    			}
    			System.out.println();
    		}
    	}
    }
    • Test064
    더보기
    public class Test064
    {
    	public static void main(String[] args)
    	{
    		for (int i=0; i<5; i++)
    		{
    			for (int j=0; j<5+i; j++)
    			{
    				if (j<=3-i)
    					System.out.print(" ");
    				else
    					System.out.print("*");
    			}
    			System.out.println();
    		}
    		for (int i=0; i<4; i++)
    		{
    			for (int j=0; j<8-i; j++)
    			{
    				if (i>=j)
    					System.out.print(" ");
    				else
    					System.out.print("*");
    			}
    			System.out.println();
    		}
    	}
    }

    실행의 흐름 컨트롤(제어문)
    - break; 실습 
    // ※ break 키워드가 지니는 의미
    // 멈춘다. (+ 그리고 빠져나간다.)
    • Test065
      - break 실습
    더보기
    /*====================================================
    	 ■■■ 실행 흐름의 컨트롤 (제어문) ■■■
    - break 실습
    =====================================================*/
    
    // 다음과 같은 처리가 이루어지는 프로그램을 구현한다.
    // 단, 입력받는 정수는 1~100 범위 안에서만
    // 가능하도록 한다.
    
    // 실행 예)
    
    // 임의의 정수 입력 : -10
    
    // 임의의 정수 입력 : 2023
    
    // 임의의 정수 입력 : 10
    // >> 1 ~ 10 까지의 합 : 55
    // 계속하시겠습니까 (Y/N)? : y
    
    // 임의의 정수 입력 : 100
    // >> 1 ~ 100 까지의 합 : 5050
    // 계속하시겠습니까 (Y/N)? : Y
    
    // 임의의 정수 입력 : 3
    // >> 1 ~ 3 까지의 합 : 6
    // 계속하시겠습니까 (Y/N)? : n 또는 N
    // 계속하려면 아무 키나 누르세요... → 프로그램 종료
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    
    public class Test065
    {
    	public static void main(String[] args) throws IOException
    	{
    		int n,a,sum;
    		char ans;
    
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		while (true)
    		{
    			do
    			{
    				System.out.print("\n임의의 정수 입력 : ");
    				n = Integer.parseInt(br.readLine());
    			}
    			while (n<1 || n>100);
    
    			sum=0;
    
    			for (a=1; a<=n; a++)
    			{
    				sum+=a;
    			}
    			System.out.printf(">> 1 ~ %d 까지의 합 : %d\n", n, sum);
    
    
    			System.out.print("계속하시겠습니까 (Y/N)?");
    			ans = (char)System.in.read();
    
    			if (ans != 'Y' && ans != 'y')
    			{
    				break;
    			}
    
    			System.in.skip(2);
    		}
    	}// end main()
    
    }// end class
    ※ System.in.skip()
    - System.in.read()로 문자 값을 읽어 올 때,
      입력한 값은 실제로 : 입력한 문자 + 엔터(\r \n) 값이기 때문에
      엔터 값이 그대로 남아있게 되어 java.lang.NumberFormatException (런타임에러) 발생하게 됨

    - 엔터 값은 \r + \n 값으로 문자 2개의 입력 값을 차지하기 때문에 
    → System.in.skip(2);           // 2개의 문자 값을 skip 해야 다음 값을 제대로 읽어 올 수 있다.      

    실행 흐름의 컨트롤 (제어문)
    - continue; 실습
    // ※ continue 키워드가 지니는 의미
    // (뒷부분 무시하고 + ) 계속해라.
    • Test066
      - continue 실습
    더보기
    /*====================================================
    	 ■■■ 실행 흐름의 컨트롤 (제어문) ■■■
    	- continue 실습
    =====================================================*/
    
    // continue 를 활용하여 다음과 같이 출력될 수 있도록
    // 프로그램을 구현한다.
    
    // 실행 예)
    /*
    1 : 1
    3 : 4
    5 : 9
    7 : 16
     :
    99 : 2500
    계속하려면 아무 키나 누르세요...
    */
    public class Test066
    {
    	public static void main(String[] args)
    	{
    		int n=0, s=0;
    		while (n<100)
    		{
    			n++;
    			if (n%2==0)			// n이 짝수라면...
    				continue;			// 뒷부분 무시하고 계속해라
    
    			s += n;										//-- 뒷부분
    			System.out.println(n + " : " + s);			//-- 뒷부분
    		}
    	}
    }
    
    // 실행결과
    
    /*
    1 : 1
    3 : 4
    5 : 9
    7 : 16
    9 : 25
    11 : 36
    13 : 49
    15 : 64
    17 : 81
    19 : 100
    21 : 121
    23 : 144
    25 : 169
    27 : 196
    29 : 225
    31 : 256
    33 : 289
    35 : 324
    37 : 361
    39 : 400
    41 : 441
    43 : 484
    45 : 529
    47 : 576
    49 : 625
    51 : 676
    53 : 729
    55 : 784
    57 : 841
    59 : 900
    61 : 961
    63 : 1024
    65 : 1089
    67 : 1156
    69 : 1225
    71 : 1296
    73 : 1369
    75 : 1444
    77 : 1521
    79 : 1600
    81 : 1681
    83 : 1764
    85 : 1849
    87 : 1936
    89 : 2025
    91 : 2116
    93 : 2209
    95 : 2304
    97 : 2401
    99 : 2500
    계속하려면 아무 키나 누르십시오 . . .
    */

    실행 흐름의 컨트롤 (제어문)
    - return; 실습
    // ※ return 키워드가 지니는 두 가지 의미
    // 1. 값의 반환
    // 2. (return 문을 포함하는) 메소드 종료
      - 단, main()메소드의 경우 값을 반환하지 않는 형태로, 메소드 종료의 의미를 가진다.
      - main()메소드의 종료는 프로그램 종료를 의미
    • Test067
      -return; 실습
    더보기
    /*====================================================
    	 ■■■ 실행 흐름의 컨트롤 (제어문) ■■■
    	- return 실습
    =====================================================*/
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    
    public class Test067
    {
    	public static void main(String[] args) throws IOException
    	{
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
    		int  n, s;
    
    		System.out.print("임의의 정수 입력(10 이상) : ");
    		n = Integer.parseInt(br.readLine());
    
    		if (n<10)
    		{
    			System.out.println("10 이상의 정수를 입력해야합니다");
    			return;
    			//-- 메소드 종료 → return 문을 포함하고 있는 메소드
    			//	→ 지금은 main() 메소드 → 프로그램 종료
    		}
    		s = 0;
    		for (int i=1; i<=n; i++)
    		{
    			s += i;
    		}
    		System.out.println("결과 : " + s );
    	}
    }
    
    // 실행 결과
    
    /*
    임의의 정수 입력(10 이상) : 2
    10 이상의 정수를 입력해야합니다
    계속하려면 아무 키나 누르십시오 . . .
    */
    
    /*
    임의의 정수 입력(10 이상) : 10
    결과 : 55
    계속하려면 아무 키나 누르십시오 . . .
    */

    메소드와 변수의 스코프
    - 메소드의 값의 반환
    - 변수의 스코프
    - 메소드의 재귀호출 (fear. 팩토리얼)
    클래스 : 설계한다, 정의한다, 규정한다
    변수     : 선언한다 → 접근한다, 참조한다...
    메소드 : 정의한다 → 호출(사용)한다

    ※ 값을 반환하지 않는 메소드 : void
    public static void main(String[] args)​

    ※ 값을 반환하는 메소드 : 메소드를 호출한 위치로 값을 반환

    public static int sum()
                  ---
               // 리턴 자료형 == 반환 자료형

     - 상기 sum이라는 이름의 메소드는 int형의 값을 반환하는 메소드


    ※ scope의 유효범위(가시성)
    - 변수는 선언된 지역 { } 을 벗어나면 자동 소멸된다.
    - 즉 선언된 클래스 혹은 메소드 안에서만 사용되며, 식별자로서의 역할도 해당 범위 내에서만 이루어진다.

    ※ 메소드의 재귀호출
    - 자바는 재귀적 메소드 호출을 허용한다.
    - 코드의 복사본이 실행된다고 이해하는 것이 재귀의 이해해 도움이 된다!

    ex) 팩토리얼

     

    728x90
Designed by planet-si