계산기를 구현해서 숫자의 거듭제곱을 계산한다.
단일 메소드 long power(int, int)를 가진 MyCalculator 클래스를 만들어서 작성해야 한다.
파라미터로 n과 p 두 정수를 사용하는데,예컨대 n의 p 제곱 형태다.
둘중 하나가 음수라면 메소드는 예외를 던져 "n or p should not be negative"라는 문구를 출력한다.
또 만약 둘다 0이라면 예외를 던지고 "n and p should not be zero"라는 문구를 출력한다.
MyCalculator 클래스 안의 power 함수를 완성하고 적절한 예외를 던진 후에 적절한 값을 반환하도록 한다.
두 정수 n과 p가 각 줄에 입력된다. online judge에 잠겨있는 stub code는 입력을 읽어 값을 파라미터로 메소드에 보낸다.
출력은 각 줄에 (두 값이 양수인경우) n의 p제곱 결과가 출력되고,
둘중 하나가 음수이거나, 둘다 0인 예외가 발생하면 그 예외를 출력해줘야 한다.
double a = 3.0F;
위의 코드는 double 타입의 변수 a에 float 타입의 값을 대입하고 있다. 이 때 3.0F의 값은 자동으로 double 타입으로 형 변환이 일어난다. 이것이 가능한 이유는 double 타입이 float 타입보다 더 많은 수를 표현 할 수 있기 때문이다. 타입을 변경해도 정보의 손실이 일어나지 않는 경우 자동 형 변환이 일어난다.
표현범위가 좁은 데이터 타입에서 넓은 데이터 타입으로의 변환만 허용된다는 것이 자동 형 변환의 원칙이다. 예컨대 byte 타입은 short가 될 수 있지만 short는 byte 타입이 될 수 없다.
float a = 100.0;
int b = 100.0F;
↓
float a = (float)100.0;
int b = (int)100.0F;
이처럼 괄호 안에 데이터 타입을 지정해서 값 앞에 위치시키는 것을 명시적인 형 변환이라고 부른다.
import java.util.Scanner;
class MyCalculator1 {
/*
* Create the method long power(int, int) here.
*/
public static long power(int n, int p) throws Exception {
if( n<0 || p<0 ) {
throw new Exception("n or p should not be negative.");
} else if ( n==0 && p==0 ) {
throw new Exception("n and p should not be zero.");
}
return (int) Math.pow(n,p); //Math.pow(x,y)는 반환 디폴트가 double이어서 int로 cast 해줌
}
}
public class ExceptionHandling {
public static final MyCalculator1 my_calculator = new MyCalculator1();
public static final Scanner in = new Scanner(System.in);
public static void main(String[] args) {
while (in .hasNextInt()) {
int n = in .nextInt();
int p = in .nextInt();
try {
System.out.println(my_calculator.power(n, p));
} catch (Exception e) {
System.out.println(e);
}
}
}
}