자바/자바 코드 예제 만들기

자바 기초 예제 문제 1. 중첩 반복문으로 구구단 만들기, 홀수만 더해서 더한 값 출력하기

Tomitom 2022. 10. 25. 17:42
반응형

중첩 반복문의 예제를 만들어볼게요. 

중첩 반복문을 이용한 예제로 가장 대표적인 것은 구구단 만들기 입니다. 

 

 

▼ 2단부터 9단까지 구구단을 만들어볼게요. 

 

 

package day12;

public class Test04 {

	public static void main(String[] args) {
				
		for(int i = 2; i < 10 ; i ++ ) {
			for(int j = 1; j < 10; j ++) {
				System.out.println(i + "x" + j + "=" + (i*j));
			}
		}
				
	}

}

 

 

for(int i = 2; i < 10 ; i ++ ) {                       -> i 인수는 2단부터 9단까지 진행하기 위한 바깥의 반복문입니다. 
 for(int j = 1; j < 10; j ++) {                      -> j 인수는 단수 안에서 곱셈을 진행하기 위한 안쪽의 반복문입니다. 
System.out.println( i  +  "x"  +  j  +  "="  +  ( i * j ) );  

 

문자열인 x와 = 를 제외한다면 

2 1 

2 2

2 3

2 4

 . . . 가 반복되는 형태입니다. 

 

 

 

▼ 구구단 짝수 출력

이에 응용한 구구단 문제로 구구단의 짝수단만 출력하는 프로그램을 만들어볼게요.

2단, 4단, 6단, 8단이 출력되어야 합니다. 

단, 2단은 2x2 까지, 4단은 4x4까지, 6단은 6x6까지, 8단은 8x8까지 출력합니다.

반복문의 중첩을 활용해주세요. 

 

이것은 정답이 여러가지가 있으니 제가 작성한 답과 선생님이 작성해주신 답을 같이 기재해볼게요. 

<선생님이 작성한 답> 

package day12;

public class Test04 {

	public static void main(String[] args) {
		
		for(int dan = 2; dan < 9 ; dan += 2) {
			for(int mul =1; mul <= dan; mul ++) {
				int result = dan * mul ; 
				System.out.println(dan + "*" + mul + "=" + result);
			}
		}
		
		
	}

}

 

 

for(int dan = 2; dan < 9 ; dan += 2) {      

 

외부 반복문

(for구문 변수 초기값) 

  int 값을 저장하는 dan 이라는 변수를 만들었습니다. 

  우리는 2단부터 시작할 예정이니 2단으로 값을 넣어줍니다. 

(for구문 조건값)

  총 8단까지 진행할 예정이니 dan은 9미만까지 반복될 수 있도록 조건을 설정합니다. 

(for구문 반복수식값) 

  반복한 이후에 2를 더해서 다시 실행되도록 수식을 설정합니다. 

  2 + 2 = 4

  4 + 2 = 6 

  6 + 2 = 8 (이렇게 짝수로 증가하도록) 


for(int mul =1; mul <= dan; mul ++) {

int result = dan * mul ;     
System.out.println(dan + "*" + mul + "=" + result);      ->

 

내부반복문

(for구문 변수 초기값)

  2단의 반복이 시작되었을 때 그 안에서 내부 반복문을 실행합니다. 

  mul 이라는 곱셈 값을 지정해주는데, 2단의 1부터 시작할 예정이니 1로 설정합니다. 

(for구문 조건 값) 

  그리고 곱셈의 값이 단수와 작거나 같아질때까지 반복하도록 설정합니다. 

(for구문 반복수식값) 

  반복한 이후에 곱셈 값을 1씩 더해서 다시 실행하도록 수식을 설정합니다. 

(for구문 출력값)

  int 값을 단수와 곱셈값을 곱한 result 값으로 설정합니다.

  그리고 System.out.println으로 result 값을 출력합니다. 

 

 

 

<제가 작성한 답> 

package day12;

/* 
 * 구구단의 짝수단인 2, 4, 6, 8단만 출력하는 프로그램을 작성해보자. 
 * 단, 2단은 2x2 까지, 4단은 4x4까지, 6단은 6x6까지, 8단은 8x8까지 출력합니다. 
 * 반복문의 중첩을 활용해주세요. 
 */
public class Quiz03 {

	public static void main(String[] args) {
		
		
			for(int i = 2; i < 9 ; i+=2 ) {
				for(int j = 1; j < 10 ; j++) {
					if(j>i) {
						break; 
						
					}
				System.out.println(i + "*" + j + "=" + (i*j));       
		
			}
		}         
	}
}

for(int i = 2; i < 9 ; i+=2 ) {

 

외부반복문

(for구문 변수 초기값) 

  int 값을 저장하는 i 변수를 만들어 초기 단수인 2단을 설정합니다.

(for구문 조건값)

  단수가 9미만이 될 때까지 반복합니다. 

(for구문 반복수식값)

  반복을 마칠 때마다 단수를 2단씩 더해 짝수 단만 반복할 수 있도록 설정합니다. 

 

for(int j = 1; j < 10 ; j++) {
if(j>i) {
break; 
}

System.out.println(i + "*" + j + "=" + (i*j));     

 

내부반복문

(for구문 변수 초기값) 

  int 값을 저장하는 j 변수를 만들어 1부터 하도록 설정합니다. 

(for구문 조건값) 

  곱셈값이 10 미만일때까지 진행합니다. 

(for구문 반복수식값) 

  반복을 마칠때마다 곱셈 값을 1씩 더해서 계산할 수 있도록 설정합니다. 

(for구문 출력값)

  if구문을 이용해서 곱셈값이 단수값보다 커졌을 때 break하여 반복에서 빠져나오도록 설정하고

  break가 되지 않았을 때에는 단수와 곱셈값을 곱한 값이 출력되도록 설정합니다. 

  ex) 2 x 1 ( i = 2, j  =1)   i > j    곱셈값 출력됨

     2 x 2 ( i = 2, j = 2)    i = j   곱셈값 출력됨

     2 x 3 ( i = 2, j = 3)    i < j   break 곱셈값 출력안됨

 

 

 

▼ 자연수 1부터 시작해서 모든 '홀수' 들을 더해 나가는 프로그램을 만들어볼게요. (합산)

총합을 합산하다가 그 합이 1000보다 커지는 순간의 홀수가 몇인지를 구해봅니다.
 반복문을 사용하는 예제입니다. 

 

이것도 정답이 여러가지가 있으니 제가 작성한 답과 선생님이 작성해주신 답을 같이 기재해볼게요.

선생님은 무한루프를 사용해서 정답을 작성했습니다. 

 

<선생님이 작성한 답> 

1. while 반복문으로 작성한 예제 

package day12;

public class Test05 {

	public static void main(String[] args) {

		
		int sum = 0;
		int count = 1; 
		while(true) {
			if(count % 2 == 1) {
				sum += count;
			}
			
			if (sum>1000) {
				System.out.println("1000을 넘어설 때의 홀수 : " + count);
				break;
			}
			count++;
		}

	}

}

int sum = 0;
int count = 1; 

 

우선 int 값으로 변수를 선언해줍니다. 

sum으로 1000이하의 합산 값을, count 로 홀수의 값을 구해볼게요. 


while(true) {         -> 조건문이 참일 때 반복하는 while로 true 값을 설정합니다. (무한반복) 
 if(count % 2 == 1) {    -> 만약 카운트하는 값이 2로 나누었을 때 나머지가 1로 떨어지는 홀수일 경우 
  sum += count;     -> sum 값에 카운트한 값을 더해주는 if 구문을 완성합니다. 
 }
 if (sum>1000) {      -> 만약 합계가 1000 이상이 되면 
  System.out.println("1000을 넘어설 때의 홀수 : " + count);    카운트한 값을 출력한 뒤에 
  break;          -> 반복을 멈춥니다. 
  }
 count++;         -> 두 번째 반복문에서 합계가 1000이상이 되지 않아 break 구문이 실행되지 않았을 시에 해당 count 값에 1을 더해서 다시 while 반복문이 무한루프를 시작합니다. 결국 1000이상이 되어 break가 될 때까지요. 

 

2. for 구문을 반복문으로 사용한 예제 

 

package day12;

public class Quiz05 {

	public static void main(String[] args) {
		
		int sum = 0;
		int count = 1; 
		for( ; ; ) {
			if(count % 2 == 1) {
				sum += count;
			}
			
			if (sum>1000) {
				System.out.println("1000을 넘어설 때의 홀수 : " + count);
				break;
			}
			count++;
		}

	}

	
}

해당 반복문은 무한루프의 반복문인 while(true)를 대신하여 무한루프 반복문 for( ; ; ) 만 수정이 되었습니다. 

 

<제가 작성한 답> 

package day12;

public class Quiz04 {

	public static void main(String[] args) {
		
		
		
		int i = 0;
		int j = 0;
				
		for(i = 1
				; j < 1000 ; i += 2) {
			j = (i+j);
		}
		System.out.println(i-2);
	}
}

뭔가... 상대적으로... 자그맣고 귀여운 쁘띠쁘띠 코딩을 해버렸는데 어찌저찌 결과 값이 무탈하게 나왔어요... ㅠ

이것도 설명을 드리자면....ㅠ... 

 

int i = 0;
int j = 0;

 

우선 int 변수 i (카운트 하는 홀수의 값을 저장할 변수) 와

j (합계를 저장할 변수) 를 만들어주었습니다. 


for(i = 1; j < 1000 ; i += 2) {    -> 카운트 홀수 값을 1부터 시작해서 합계가 1000이 되기 전까지 반복을 하고 반복이 끝나면 카운트 값에 + 2를 추가해 홀수가 진행되도록 구문을 설정합니다. 

ex) 1 + 2 = 3

3 + 2 = 5

 . . .

 

j = (i+j);     -> 반복이 될 때마다 카운트한 값에 합계 값을 더합니다. 
}

System.out.println(i-2);      -> 합계가 1000이 되었을 때 반복이 멈추면 마지막에 남은 카운트 값에 -2를 한 값을 출력합니다. 여기서 조금 ㅠㅠ 예쁘지 않은 코드가 나왔는데요. 

카운트 홀수 값을 만들어주기 위해 i +=2 를 하는 값은 한 번 반복이 끝날 때마다 값이 더해지는 것이기 때문에 

최종적으로 1000이 넘어가는 반복문에서도 마지막에는 최후의 2가 더해지게 됩니다. 

그렇기 때문에 저는 i의 값에 -2 를 해서 반복문의 최종에 붙은 +=2 의 값을 제거해준 것이에요... 

이미 앞서 코드가 완성되었기 때문에 -2 <-요 부분을 어떻게 정리할 수 있는 방법이 없다고 하더라구요 ㅠㅜ 

다음엔... 조금 더 연습을 해야겠습니다.

다른 정답이 또 있다면 알려주세요~ 그것도 함께 공부할게요 ^ㅡ^! 

반응형