예외처리, 난수(Random Number)

완성된 프로그램이란 무엇일까?
그 프로그램의 이름에 걸맞는 기능이 구현되어 있어야 한다
더 나아가서 버그가 없어야한다(오동작이 없어야한다).

버그가 나거나 버그로 인해 튕기는 것을 방지해주는 방법
예시 : 숫자입력받는 부분에 문자를 넣는 경우

1. nextline을 받고 parseint하기 전에 입력받은 것이 숫자인지 확인하기
2. 에러가 날거면 나라! -> 에러가 난 후에 처리 = 예외처리

예외가 발생하면, 예외가 발생한 지점 이후의 코드들이 실행되지 않는다.
=예외가 발생함과 동시에 (throw를 타고 튕겨나가면서) 프로그램이 종료됨.  ⇒ 예외처리가 필요한 이유

 

 

Unhandled Exception = Checked Exception (컴파일러가 이미 알고 있는 예외)

 

 

Unchecked Exception

Integer.parseInt(sc.nextLine());에 대해선 컴파일러가 예외 가능성을 모르고 있음.
(해당 문법을 만든 사람이 예외 가능성을 명시하지 않아서 컴파일러가 모름?)

 

 

 

try문에는 예외가 발생할 것으로 예상되는 코드를 넣는다. try문에는 꼭 catch문이 따라온다.

예외가 발생할 경우 
예외발생지점 직후 바로 throw로 튕겨져 나가고 catch문의 실행문이 실행
예외가 발생했지만 try-catch로 예외처리가 되었기 때문에  프로그램이 정상적으로 계속 진행되어 그 이후에 바깥의 프로그램들이 흐름에 이어 계속 진행된다.

예외가 발생하지 않을경우  
예외가 발생하지 않았을 경우에는 catch의 실행문은 실행되지 않는다.

 

 

Exception e ---> 객체지향문법인데 나중에 설명할 것임. 일단은 이렇게 입력해서 쓰는거라고만 생각하기.   예외의 종류를 쓴거임.

 

try catch를 세분화해서 잡아주면 (예외가 2~3개정도 발생할 것으로 예상되는 경우 예외가 발생할 것 같은 지점에 대해서 try-catch를 2~3개로 각자 따로 넣어주면 개발자는 불편하지만 사용자는 편하다.) 

뭉뚱 그려 try-catch 하나에 다 넣으면 회원가입할때 이름,전화번호,주소를 넣는 도중 주소를 틀리면 이름부터 다시 입력해야함(예외발생지점에서 thorw로 던져지니까) 각각 try-catch문을 쓰면 주소를 틀리면 주소만 다시 입력하면 됨 ---> 이용자 편리



우리가 지금까지 만든 변수는 “지역 변수”이다. Local variable

 

 

 

try {

 

}catch(Exception e) {

System.out.println("입력값이 숫자가 아닙니다.");

e.printStackTrace();

}

 

try-catch로 묶는 순간 빨간오류메세지가 뜨지 않음.

e.printstacktrace();를 넣어주면 빨간오류메세지가 뜨고, 프로그램은 진행됨.

⇒ 개발자가 개발하는 단계에서 다 넣어야, 어떤 에러가 나는지를 확인할 수 있음 ⇒ 최종적으로 완성되었을때 e.printstacktrace()를 지우면, 사용자는 개발자가 지정한 안내메세지만 보고, 빨간오류메세지는 안뜸.

(try-catch로 묶지 않으면 빨간오류메세지가 뜨고, 예외부분에서 throw로 던져져 프로그램 종료됨)

 

 

 

 

난수(Random Number) - 무작위, 임의의 값

 

개발자조차도 예측불가한 숫자  ---> 게임, 시뮬레이팅 분야에서 많이 사옴

임의의 값 또는 무작위로 만들어지는 알 수 없는 값

프로그램을 껐다 켜도, 다시 시작해도 예측할 수 없는 숫자가 나와야할 때 사용

 

난수생성의 활용 : 주사위 게임, 포커게임 및 슈팅게임 등

 

난수 생성 Method

Math 클래스 내부의 random() method

0 ~ 1.0 사이의 값을 무작위로 Return

 

======================================================================

원하는 난수 범위를 구하기 위해 적절한 연산과 형 변환이 필요

Math.random()*(최대 - 최소 + 1) +최소

 

⇒ 최대-최소+1 은 최소값과 최대값 사이의 갯수차? 를 위해서

⇒ 맨 마지막에 최소를 더하는 이유는 랜덤수의 시작값을 위해서

 

정수형으로 나오려면 Casting을 해줘야함

(int)(Math.random()*(최대-최소+1)+최소

======================================================================

(원하는 범위에서 난수를 구하기 위한 공식)

최소 :x        최대 :y

Math.random * (y-x+1)+x

======================================================================

게임에서 평타의 공격력과 크리티컬이 터졌을 때의 공격력을 생각한다면????