경험 및 후기

(2) Test 복권만들기

주니홍 2022. 6. 17. 18:15

강사님의 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package class05;
 
import java.util.Random;
import java.util.Scanner;
 
public class Test01 {
 
    static void f1(int[] data) {
        for(int i=0;i<data.length;i++) {
            System.out.print(data[i]+" ");
        }
        System.out.println();
    }
 
    static int[] f2(int num) {
        Random rand=new Random();
 
        int[] data=new int[num];
        int i=0;
        while(i<data.length) {
            int randNum=rand.nextInt(50)+1;
 
            boolean flag=false;         
            for(int j=0;j<i;j++) {
                if(randNum==data[j]) {
                    flag=true;
                    break;
                }
            }
            if(flag) {
                continue;
            }
            data[i]=randNum;         
            i++;
        }      
 
        return data;
    }
 
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
 
        int num; // 유효범위(scope)
        while(true) {
            System.out.print("정수입력: ");
            num=sc.nextInt();
            if(1<=num && num<=50) {
                break;
            }
            System.out.println("1이상 50이하만 입력하세요!");
        }
 
        int[] lotto=f2(num);
        f1(lotto);
    }
 
}
cs

 

나의코드

 

강사님과 코드를 비교하며 느낀점

 

1. 복권이 중복된 숫자를 배열 값에 대입하면 안되는 메소드

  • 내 코드에선 for문을 두번돌려 사용했다
    중복코드확인 for문에서 i -- ; 를 사용했는데
    이는 실무에서 사용하기 좋지 않는 코드이다
  • 실무에선
    while == 반복횟수 모름
    for      == 반복횟수 확실
    이라는 걸 기본으로 생각하고 있기때문에
    for문에서 i--이용하는것은 증감식인 i++을 무시하고
    확실한 반복횟수로 반복하지 않기때문에 좋지않다
    2중 for문을 사용했다면 실무에선 중복코드를 바꿔주는 코드로 보기 어려워 할 것이다

 

2. 나의 코드의 유효성검사에 보면

while문의 break; 위에 결과 출력물을 적어도 해당 코드는 사용이 된다

하지만 while를 사용한 의미를 퇴색하지 않기위해

그저 유효성검사를 위한 while문 이기에 그곳에 결과물을 넣어두는건

"가독성" 에 좋지않을 것 같다! while문이 좋료 된 뒤에 출력할 수 있도록

결과 출력코드는 뒤에 배치해놓도록 하자

위 사진도 마찬가지 의미로서,

각각의 의미를 가진 for문으로서 사용해야

해당 for문들의 의미를 표현하고 가독하기 좋을 것이다! 

 

 

3. flag 변수 사용방법 올바르게 하기

유효성검사에서 flag변수를 사용해도 상관은 없어 보이지만

간단한 유효성검사인데 굳이 flag변수를 만들어 사용할 부분은 아니였다

이럴땐 확인해보고 continue; break; 를 이용하여 사용하도록 하고

continue; break;도 둘다 사용하는 것이 아니라 하나만 사용해서 끝낼방법도

찾아서 코드에 넣도록 하자!