주사위

권재현·2021년 4월 11일
0

문제풀이

목록 보기
7/8
post-thumbnail

내가 풀었던 문제이지만, 나는 정말 1차원 적으로 풀었고, 선생님께서 조금 더 프로그래밍적으 문제를 푸셨고 ,무엇보다도 내가 아직 예외처리에 대해 감이 없어서 풀이해볼겸 코드를 분석한다.
그리고 언제나 그렇듯이 내가 누군가에게 설명한다는 가정하에 글을 쓴다

문제

원하는 주사위와 주사위 개수를 입력 받아 그 결과를 확인하는 프로그램을 구현하시오.

Scanner sc = new Scanner(System.in);
	boolean flag =  true;
	while(flag) {
		System.out.println("1.시작 \t2.종료");
		String menu = sc.nextLine();
			
	switch(menu) {
		case "1":
			int dice ; //주사위 변수
			int cnt ; // 주사위 개수 변수
				//주사위 종류입력
	while(true) {
		System.out.println("주사위 종류를 입력하세요.(숫자만 입력하세요.)");
			try {//인트로 형변환
				dice = Integer.parseInt(sc.nextLine());
				break;
			} catch (Exception e) { //숫자아니면 캐치 발동
				e.printStackTrace();
			}
        }

값을 입력 받기위해 스캐너 함수를 불러왔고, flag 변수는 while문의 동작유무를 위해서 사용 되었다. 아마 끝날 쯤 밑에서 false 로 초기화 시킬 것이다. 변수는 주사위와 주사위 개수가 있다. 그리고 드디어 try catch 문이 나왔다.
dice를 초기화 시키기 위해 입력 값 받는 부분이 sc.nextLIne()으로 스트링으로 받기에 인트로 캐스팅을 통해 형변환 시켜주고있다. 그리고 조금 이해가 어려웠던 부분이 break;가 뜬금 없이 나와서 곰곰히 생각해본 결과 만약, break; 가 없다면 while문에서 멈출 수 있는 방법이 없다. 그래서 무한 반복을 하기 때문에 break;가 사용되었다.

catch 문 가로안에 있는 Exception 클래스가 예외 클래스 중 최상위 클래스라서 사용하면 굳이 다른 예외 클래스를 할 필요가 없다. printStackTrace(); 메소드는 현재 발생환 예외가 어떤 거 때문에 발생 했는 출력해 친절히 알려준다.

//주사위 개수 입력
	while(true) {
		System.out.println("주사위 개수를 입력하세요.(숫자만 입력하세요.)");
		try {
			cnt= Integer.parseInt(sc.nextLine());
			break;
		} catch (Exception e) {//숫자아니면 캐치
		e.printStackTrace();
			}
		}
		for(int i= 0; i < cnt; i++) {
   	   //입력받은 cnt보다 작을 때 까지 실행
		System.out.println((int)(Math.floor(Math.random()* dice))+1);
		}
			break;
		case "2": 
			flag=false;
			System.out.println("종료합니다.");
			break;
			default : 
			System.out.println("잘못입력했습니다.");
				
			}
		}
	}

주사위 개수를 입력 받는 부분도 주사위를 입력 받는 부분과 크게 다르지 않다. 주사위 개수를 입력 받고 출력받는 for문의 조건식을 살펴보면 i < cnt 로 되어있다. 이 뜻은 i 가 cnt 보다 작을 때 까지 for 문이 실행된다는 이야기다. 그리고 case 2 를 보면 역시 내가 위에서 언급 했 듯이 flag = false 라고 종료를 위해서 초기화를 시켜준다.

profile
호텔리어 출신 비전공자

0개의 댓글