본문 바로가기
카테고리 없음

인프런 워밍업 클럽 1기_BE 5일차 과제

by 엔 터 2024. 5. 9.

제공 코드

import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws Exception {
        System.out.println("숫자를 입력하세요 : ");
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();

        int r1 = 0, r2 = 0, r3 = 0, r4 = 0, r5 = 0, r6 = 0;

        for (int i = 0; i < a ; i++) {
            double b = Math.random() * 6;
            if (b >= 0 && b < 1) {
                r1++;
            } else if (b >= 1 && b < 2) {
                r2++;
            } else if (b >= 2 && b < 3) {
                r3++;
            } else if (b >= 3 && b < 4) {
                r4++;
            } else if (b>=4 && b <5) {
                r5++;
            } else if (b>=5 && b < 6) {
                r6++;
            }
        }

        System.out.printf("1번은 %d번 나왔습니다.\n", r1 );
        System.out.printf("2번은 %d번 나왔습니다.\n", r2 );
        System.out.printf("3번은 %d번 나왔습니다.\n", r3 );
        System.out.printf("4번은 %d번 나왔습니다.\n", r4 );
        System.out.printf("5번은 %d번 나왔습니다.\n", r5 );
        System.out.printf("6번은 %d번 나왔습니다.\n", r6 );
    }
}

 

 

클린코드

import java.util.Scanner;

public class Main {

    private static final int DICE_MAX_NUMBER = 6; // 상수 선언

    public static void main(String[] args) throws Exception {
        System.out.println("숫자를 입력하세요 : ");
        Scanner scanner = new Scanner(System.in);
        int inputNumber = scanner.nextInt(); // 변수 명 변경

        int[] diceNumbers = new int[DICE_MAX_NUMBER]; // 배열 선언



        for (int i = 0; i < inputNumber; i++) { // 
            double pip = Math.random() * DICE_MAX_NUMBER;
            int diceIndex = (int) pip;

            if (diceIndex >= 0 && diceIndex < DICE_MAX_NUMBER) {
                diceNumbers[diceIndex]++;
            }

        }


        for (int i = 0; i < DICE_MAX_NUMBER; i++) { // for문으로 중복 제거
            System.out.printf((i + 1) + "번은 %d번 나왔습니다.\n", diceNumbers[i]);
        }
    }
}

 

상수 선언

원래코드  double b = Math.random() * 6; 에서 6은 주사위 눈의 최댓값을 의미한다.
하지만 코드를 읽는 사람은 이 6이 무엇을 의미하는지 바로 알기 어렵다
이런 수를 Magic Number라고 한다.
Magic Number를 없애기 위해 상수를 선언하였다.

변수 이름 변경

변수 이름이 a, b로 설정되어 있어 해당하는 변수들이 어떤 값인지 알기 어렵다
그래서 변수 a,b를 각각 inputNumber, pip으로 바꿔주었다.

 

변수 이름 짓기에 관한 좋은 글이 있어 공유합니다 한번 읽어보시면 좋을 거 같아요

https://www.inflearn.com/pages/infmation-69-20240509

 

개발자의 이름 짓는 법, 네이밍 컨벤션 - 인프런 | 스토리

이름에도 규칙이 있다? 알고 쓰는 네이밍 컨벤션 A to Z 프로그래밍 코딩컨벤션 네이밍컨벤션 [사진]Quora 및 Ubuntu 포럼에서 진행된 토론 스레드에 따르면 토론에 응답한 개발자 49%가 이름 짓는

www.inflearn.com

 

배열 선언

원래 코드에서 1~6까지의 눈의 수가 얼마나 나오는지 확인하기 위해 int형 변수 r1 ~ r6까지 선언해서 사용 중이다.

아래 printf 문이 반복되고 있으므로 for 문을 사용하기 위해 변수 6개를 int 배열로 바꿔 주었다.

배열을 선언할 때 앞서 선언한 상수를 이용해서 주사위 눈의 최대 크기가 증가해도 상수만 바꿔주면

배열의 크기도 같이 바뀐다.

 

for문으로 중복 제거

printf문이 6번 반복되고 있어서 for 문으로 중복을 제거해 주었다.

 

if분기 제거

if문이 중복되고 있어서 주사위 눈을 가리키는 pip를 인덱스 첨자를 가르키는 diceIndex변수로 바꿔서 배열을 가리킬 수 있게 만들어서 주사위 눈이 나온 만큼 올려준다

출처

https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EC%84%9C%EB%B2%84%EA%B0%9C%EB%B0%9C-%EC%98%AC%EC%9D%B8%EC%9B%90#

 

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인

최태현 | Java와 Spring Boot, JPA, MySQL, AWS를 이용해 서버를 개발하고 배포합니다. 웹 애플리케이션을 개발하며 서버 개발에 필요한 배경지식과 이론, 다양한 기술들을 모두 학습할 뿐 아니라, 다양한

www.inflearn.com

 

틀린 내용이나 부족한 부분 댓글로 알려주시면 추가로 공부해서 수정하겠습니다 감사합니다.