** for, 중첩(다중)for

 

* for()

 

* 다중 for문법

 

 

 


** 실습1 **

/* 1
 문제)지난주 마지막 문제를 참고하여 아래와 같이 출력하는 프로그램 작성
 입력예)4
 출력예)[1,1]
     [2,2]
  [3,3]
     [4,4]
 단, 공백은 printf("%5c", ' '); //print("     ")
 */

	      int i, j, num;
	      num = scn.nextInt();	     
	      
	      for(i = 1; i <= num; i++)
	      {
	         for(j = 1; j <= num; j++)
	         {
	            if(i == j)
	            {
                	System.out.printf("[%d,%d]", i, j);
                    //System.out.print("[" + i + "," + j + "]");
	            }
	            else
	            {
                	System.out.print("     ");
	            }
	         }	         
	         System.out.println();
	      }

** 실습2 **

 /* 2
       문제)구구단을 입력 받아 해당 단 일부를 출력하는 프로그램
       단, 입력변수는 a, b를 사용하고 a는 작은단, b는 큰단으로 해서 a부터 b까지 출력.
          출력결과시 (%d * %d = %2d \t)
          입력예)5 2
          출력예)2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10
              ...
              5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25

 */

		int a, b, i, j, tmp;
		
		a = scn.nextInt();
		b = scn.nextInt();
		
		if(a > b)		// a를 작은 값으로 바꾸는 과정
		{
			tmp = a;
			a = b;
			b = tmp;
		}
		for(i = a ; i <= b ; i++ )			//// i - 행 (에서 바뀌지 않는 값)
		{
			for(j = 1 ; j <= 5 ; j++)		// j - 열 (에서 바뀌지 않는 값)
			{
				System.out.printf("%d * %d = %2d \t" ,i ,j, i * j );		// i는 열이고, j는 행이라고 생각하면 좋다.
			}
			System.out.println();
		}

** 반복제어문(소괄호 안에 조건식이 참 일 동안 반복) **

- for / 중첩for / while / do~while / 중첩(다중)while / 무한루프

 

* while 

- 문법

  while(조건식)

  {

      반복 실행문

      증감식;

  }

 

 - 사용법

int a =1;   // while은 초기값을 먼저 세팅해야한다.

whlie(a <= 10)

{

   System.out.println(a);

   a++;

}

 

* do ~while (// 최소 한번은 실행한다.)

 - 문법

   do

   {

          반복 실행문;

          증감식;

    } while(조건식);

 

 

* 무한루프 

 - while(true) / while(1 == 1)

 - for (;;) : 조건식이 존재하지않으면 무한루프

 

 

 

** 이동제어문 ** ( break)

- break / continue / return

 

* break  continue

 - break : 본인을 감싸고있는 가장 가까운 반복문()을 탈출함

 - continue : continue이후에 작성된 코드 실행중단, 반복문 자체를 종료시키지 않는다. ( whlie 조건문으로 for문의 증감식으로 돌아감)

 - Tip : { }안에있는것은 실행이되어야함으로  break와  continue는 { }안에서 맨 마지막에 써야 오류가 뜨지 않는다.

 


* 예제 *

//while(반복문)

 

int a = 0;

while(a <= 10)
{
System.out.println(a);
a++;
//a++없으면 무한으로 실행된다. | a++이 println 앞으로가면 11까지 출력된다.
}

// 위의 whlie문을 for문으로 바꿔보기.
for(a = 1 ; a <= 10 ; a++)
{
System.out.println(a);
}

 


** 실습3 **

/* 3
 문제)알파벳 'A'부터 'Z'까지 출력하는 프로그램 작성
 출력예)ABCDEFGHIJKLNMOPRSTUVWXYZ
 단, 변수는 alpha = 'A' 초기 대입후 사용
 */

		char alpha = 'A';		//char는 ''(작은따옴표)
		
		while(alpha <= 'Z')
		{
			System.out.println(alpha);
			alpha++;
		}

** 실습4 **

/* 4
 문제)1이상 100이하의 정수를 입력받아 whlie문을 이용하여 1부터 입력받은 정수까지의 
  합을 구하여 출력하는 프로그램 작성.
  입력예)10
  출력예)55
 */

		int i, num, sum;
		
		i = 1;
		sum = 0;
		num = scn.nextInt();
		
		while(i <= num)
		{
			sum += i;		//누적변수는 처음에 0으로 설정해야한다.
			i++;
		}
		
		System.out.println(sum);

** 실습5 **

/* 5
 문제)점수를 입력받아 80점 이상이면 합격메세지를 그렇지 않으면 불합격 메세지를 출력하는
  작업을 반복하다가 0~100 이외의 점수가 입력되면 종료하는 프로그램 작성.
  단, while문에 조건식에 비교와 논리연산자 사용. (break 사용안함)
 입출력예)점수를 입력하세요.>50
     죄송합니다. 불합격입니다.
     점수를 입력하세요.>95
     축하합니다. 합격입니다.
     점수를 입력하세요.>101
 */

		int score;
		
		System.out.print("점수를 입력하세요.>");
		score = scn.nextInt();
			
		while(score >= 0 && score <= 100)
		{				
			if(score >= 80)
			{
				System.out.println("축하합니다. 합격입니다.");
			}
			else
			{
				System.out.println("죄송합니다. 불합격입니다.");
			}
			System.out.print("점수를 입력하세요.>");
			score = scn.nextInt();
		}

** 실습6 **

/* 6
 문제)위의 문제를 while 무한루프를 이용하여 작성
 단, while(true) -> break; (continue) -> for(;;)
 */

		int score;
		
		while(true)
		{
			System.out.print("점수를 입력하세요.>");
			score = scn.nextInt();
			
			if (score < 0 || score > 100)
			{
				break;		// break를 감싸고있는 첫번째 반복문(while)을 빠져나간다.
			}
			
			if(score >= 80)
			{
				System.out.println("축하합니다. 합격입니다.");
			}
			else
			{
				System.out.println("죄송합니다. 불합격입니다.");
			}
		}

** 실습7 **

/* 7
 문제)1부터 10까지 반복하면서 홀수만 출력하는 프로그램
  단, continue문 사용
  출력예)1 3 5 7 9
 */

		int num = 0;
		
		while(num < 10)
		{
			num++;
			
			if(num % 2 == 0)
			{
				continue;
			}
			System.out.print(num + " ");
		}
        
        
        // 위와 동일한 조건으로 for문 이용
		int num;
		
		for(num = 1 ; num <= 10 ; num++)
		{
			if(num % 2 == 0)
				continue;
			System.out.print(num + " ");
		}

** 실습8 **

/* 8
 문제)정수를 계속 입력받다가 0이 입력되면 0을 제외하고 이전에 입력된 자료의 수와 합계,
   평균을 출력하는 프로그램
   단, while 무한루프로 사용하고 평균은 소수 둘째자리까지 출력
 입력예)15 88 97 0
 출력예)입력된 자료의 개수는 = 3개
    입력된 자료의 합계 = 200
    입력된 자료의 평균 = 66.67
 */

		int a;
		int sum = 0, count = 0;
		double avg = 0.0;
		
		while(true)
		{
			a = scn.nextInt();
			
			if(a == 0)
				break;			

			sum += a;
			count++;
		}
		
		avg = (double)sum / count;

		System.out.printf("입력된 자료는 개수는 = %d개\n", count);
		System.out.println("입력된 자료의 합계 = " + sum);
		System.out.printf("입력된 자료의 평균 = %.2f \n", avg);
        
        //-----------------------------------------------------------
        
        while(true)
		{
			a = scn.nextInt();
			
			if(a == 0)
				avg = (double)sum / count;
				System.out.printf("입력된 자료는 개수는 = %d개\n", count);
				System.out.println("입력된 자료의 합계 = " + sum);
				System.out.printf("입력된 자료의 평균 = %.2f \n", avg);
				break;			

			count++;
			sum += a;
		}

** 실습9 **

/* 9
 문제)정수를 계속 입력받다가 0 이 입력되면 0을 제외하고 입력된 수 중 홀수의 
  합계와 평균을 출력하는 프로그램
   단, continue와, break문 사용
 입력예)5 8 17 6 31 0
 출력예)홀수의 합 : 53
    홀수의 평균 : 17
 */

		int num;
		int sum = 0, avg = 0, cnt = 0;
		
		while(true)
		{
			num = scn.nextInt();
			if(num == 0)
				break;			
			if(num % 2 == 0)
				continue;
			
			sum += num;
			cnt++;
		}
		
		avg = sum / cnt;
		System.out.println("홀수의 합 : " + sum);
		System.out.println("홀수의 평균 : " + avg);

** do~while문 **

 

* 예제

		//do~whlie 문
        
		int a = 1;
		
		do
		{
			System.out.println(a + "번째 출력");
			a++;
		}while(a <= 10);
        
        //----------------------------------------------------------------------------
        
        		/*
		 문제)위 문제를 while문 무한루프를 사용하여 프로그램작성
		 */
		
		int a = 1;
		
		while(true)
		{
			System.out.println(a + "번째 출력");
			a++;
			
			if(a > 10) break;
		}
        
         //----------------------------------------------------------------------------
		
		// 위 문제를 while문에 조건식을 이용하여 프로그램작성
		
		int a = 1;
		
		while(a <= 10)
		{
			System.out.println(a + "번째 출력.");
			a++;
		}

** 실습10 **

/* 10
 문제)정수를 계속 입력 받다가 0이 입력되면 입력받은 수 중 홀수의 합과 평균을 
   출력하는 프로그램 작성.
   단, do~while문을 사용하고 break, continue는 사용안함.
 입력예)5 8 17 6 31 0
 출력예)홀수의 합 : 53
    홀수의 평균 : 17
 */

		int num, sum = 0, avg, cnt = 0;
		
		num = scn.nextInt();
		do {
			num = scn.nextInt();
			if(num % 2 == 1)
			{
				sum += num;
				cnt++;
			}

		}while(num != 0);
		
		avg = sum / cnt;
		
		System.out.println("홀수의 합 : " + sum);
		System.out.println("홀수의 평균 : " + avg);

** 실습11 **

/*
 문제)아래와 같이 메세지를 출력하고 숫자를 입력받아 선택한 번호에 해당하는 메세지를
   출력하는 작업을 반복하다가 4가 입력되면 메세지 출력 후 종료하는 프로그램
   단, do~while문 사용하고 1~4 이외의 수가 입력되면 "잘못 입력하셨습니다." 라고 출력
 입.출력예)1.입력하기
  2.출력하기
  3.삭제하기
  4.끝내기
  작업할 번호를 선택하세요.>2(4)
 
  출력하기를 선택하셨습니다. (끝내기를 선택하셨습니다.)
 입.출력예)1.입력하기
  2.출력하기
  3.삭제하기
  4.끝내기
  작업할 번호를 선택하세요.>4
 
  잘못 입력되셨습니다. (다시 반복)
 */

		int a;

		do
		{
			System.out.println("1.입력하기");
			System.out.println("2.출력하기");
			System.out.println("3.삭제하기");
			System.out.println("4.끝내기");
			System.out.print("작업할 번호를 선택하세요.>");
			a = scn.nextInt();
			
			System.out.println();
			
			if(a == 1)
			{
				System.out.println("입력하기를 선택하셨습니다.");
			}
			else if(a == 2)
			{
				System.out.println("출력하기를 선택하셨습니다.");
			}
			else if(a == 3)
			{
				System.out.println("삭제하기를 선택하셨습니다.");
			}
			else if (a == 4)
			{
				System.out.println("끝내기를 선택하셨습니다.");	
				break;
			}
			else
			{
				System.out.println("잘못 입력하셨습니다.");
			}
			
		}while(a != 4);

 

		int a;

		do
		{
			System.out.println("1.입력하기");
			System.out.println("2.출력하기");
			System.out.println("3.삭제하기");
			System.out.println("4.끝내기");
			System.out.print("작업할 번호를 선택하세요.>");
			a = scn.nextInt();
			
			System.out.println();
			
			if(a == 1)
			{
				System.out.println("입력하기를 선택하셨습니다.");
			}
			else if(a == 2)
			{
				System.out.println("출력하기를 선택하셨습니다.");
			}
			else if(a == 3)
			{
				System.out.println("삭제하기를 선택하셨습니다.");
			}
			else if (a == 4)
			{
				System.out.println("끝내기를 선택하셨습니다.");	
				break;
			}
			else
			{
				System.out.println("잘못 입력하셨습니다.");
			}
		
			//if를 switch문으로 적용
			
			switch(a) {
			case 1:
				System.out.println("입력하기를 선택하셨습니다.");
				break;
			case 2:
				System.out.println("출력하기를 선택하셨습니다.");
				break;
			case 3:
				System.out.println("삭제하기를 선택하셨습니다.");
				break;
			case 4:
				System.out.println("끝내기를 선택하셨습니다.");	
				break;
			default:
				System.out.println("잘못 입력하셨습니다.");
			}
			
		}while(a != 4);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'수업끄적끄적_7MONTH > Java' 카테고리의 다른 글

11/08 수업(8일차)  (0) 2023.11.08
11/07 수업 (7일차)  (1) 2023.11.07
11/02 수업 (4일차)  (0) 2023.11.05
11/01 수업 (3일차)  (0) 2023.11.05
10/31 수업 (2일차)  (0) 2023.11.05

+ Recent posts