[JAVA] 박수박수 문제

     

    <문제코드>

    4를 입력하면 박수박수로 연이어 출력되어야 하는데 위의 코드로 실행하면, 수가 4번 나오게 된다. 

     

    package exmaple.q1;
    
    import java.util.Scanner;
    
    public class Hard {
    
    	Scanner sc = new Scanner(System.in);
    	
    	public void method1() {
    		
          System.out.print("1이상의 숫자를 입력해주세요 : ");
          int num = sc.nextInt();
    
          for(int i=0; i<num;i++) {
    
         	 if(num % 2 == 1) {
              System.out.println("박");
              } else if(num % 2 == 0) {
              System.out.println("수");
              } else {
              System.out.println("양수를 입력해주세요");
              }	
          }
    		
    		
    		
    		
    }

     

    <결과값>

    1이상의 숫자를 입력해주세요 : 4
    수
    수
    수
    수

     

    <문제점>

     

    문제점1)

     

    나의 코드를 해석하자면, 

    1) 반복문

    2-1) 조건문(홀수일경우)

    2-2) 조건문(짝수일경우)

    2-3) 음수일 경우  

    이렇게 기술했다. 

     

    따라서 입력한 값(==num)이 어떤 숫자이든, 무조건 반복문이 실행되고, 0과 -1일 경우에는 "양수를 입력해주세요"라는 구문 또한 출력되지 않는다. 

     

     

    코드를

    1) 조건문 ( 음수가 아닐 경우 )

     

    1-1) 반복문 ( 조건이 num보다 작거나, 같을 경우까지, 1씩 증가 )

    1-1-1) 조건문 ( 홀수일 경우 )

    1-1-2) 조건문 ( 짝수일 경우 )

     

    2) 음수일 경우 

     

    로 기술했었어야만 한다. 

     

     

    문제점2.1)

     

    코드를 올바르게 기술 했다 하더라도, 문제점이 발생한다.

    바로 1-1)의 반복문의 조건을 올바르게 제시하지 않았다.

     

    나의 경우 습관적으로 for(int i=0; i<num;i++)를 제시하는 경향이 있는데, 다음과 같이 기술한다면, 

    		      if(num>0) {
    		    	  for(int i=0; i<num;i++) {
    		    		  
    		    		  if(i % 2 == 1) {
    				        	 System.out.print("박");
    				         } else {
    					          System.out.print("수");
    				         } 
    		    	  }

     

    1 => 수

    2 => 수박

    3 => 수박수

    4 => 수박수박

     

    이런 결과값이 출력된다.

     

    이유

    더보기

    i가 0이기 때문에 for문 안에서 else 블럭이 먼저 기술된다. 따라서 '수'라는 문자가 먼저 출력되고, 

    i가 1이기 때문에 if 블럭 안으로 들어가서 '박'이라는 문자열이 출력된다. 

     

     

    그럼 for(int i=1; i<num;i++) 로 조건을 제시하면 어떻게 될까? 

     			for(int i=1; i< num;i++) {
    		    		  
    		    		  if(i % 2 == 1) {
    				        	 System.out.print("박");
    				         } else {
    					          System.out.print("수");
    				         } 
    		    	  }

     

    1 => 아무것도 출력되지 않음

    2 => 박

    3 => 박수

    4 => 박수박

     

    다음과 같이 2이상을 입력해야 값 하나가 출력된다. 

     

    이유

    더보기

    i가 1이기 때문에 반복문 안으로 들어왔지만, i가 num보다 작을 때까지만 조건문이 수행되기 때문에, (위의 경우 1<1 과 같은 상황이다) 반복문이 멈춰버리는 것이다. 따라서 i<=num 일 때까지 조건문이 반복되어야 한다. 

     

    문제점2.2)

     

    코드와 반복문을 바르게 기술했다고치자. 하지만 여기서 또! 문제가 발생한다.

    		    	  for(int i=1; i<= num;i++) {
    		    		  
    		    		  if(num % 2 == 1) {
    				        	 System.out.print("박");
    				         } else {
    					          System.out.print("수");
    				         } 
    		    	  }
    

     

    1 => 박

    2 => 수수

    3 => 박박박

    4 => 수수수수

     

     

    출력되는 결과값의 갯수는 각각 1일 때 한 개, 2일 때 두 개로 원하는 값이지만, 결과값이 '박수'가 아닌 '수수'으로 '수'가 2번 출력된다. 

     

     

    이유

    더보기

    위의 경우 반복문 안에 기술된 조건식이 올바르지 않은 예이다. 반복문 안에 기술된 코드는 무조건적으로 실행이 되고, 

    1 % 2 == 1 이므로 '박'이 한 번 출력되고, 

    2 % 2 == 0 이므로 '수'가 두 번 출력된다. 

    따라서, 조건식을 num이 아닌 i로 제시해야만한다.

    예를 들어 2를 입력하면 1 => 박 1+1 => 수 이렇게 출력될 것이며,

    원하는 값까지의 결과값들이 순차적으로 나열될 것이다.

     

     

    <모범답안>

     

    	public void method1() {
    
    		Scanner sc = new Scanner(System.in);
    		System.out.print("한 개의 정수를 입력해주세요 : ");
    		int num = sc.nextInt();
    
    		if (num > 0) {
    
    			for (int i = 1; i <= num; i++) {
    				if (i % 2 == 1) {
    					System.out.print("박");
    				} else {
    					System.out.print("수");
    				}
    			}
    		} else {
    			System.out.println("양수가 아닙니다뿅뿅");
    		}
    

     

     

     

    728x90

    댓글