Обработка исключений Java для бесконечности

Я пытаюсь написать программу, чтобы приравнять значение любого числа к любой степени, и я предполагаю реализовать обработку исключений для показателей степени меньше нуля, что я успешно сделал, а также обработчик исключений, когда значение слишком велико для вывода, т.е. бесконечность.

вот мой класс мощности, который содержит функцию Power :

public class power
{
// instance variables - replace the example below with your own
public static double Power(double base, int exp) throws IllegalArgumentException
{  

    if(exp < 0){

        throw new IllegalArgumentException("Exponent cannot be less than zero");

    }
    else if(exp == 0){
        return 1;

    }


    else{
        return base * Power(base, exp-1);

    }
}

}   

Вот тестовый класс:

public class powerTest
{
public static void main(String [] args)
{
  double [] base =  {2.0, 3.0, 2.0, 2.0,  4.0 };
  int [] exponent = {10,   9,   -8, 6400, 53};

  for (int i = 0; i < 5; i++) {

     try {
        double result = power.Power(base[i], exponent[i]);
        System.out.println("result " + result);
     }   
     catch (IllegalArgumentException e) {
        System.out.println(e.getMessage());
     }
     catch (ArithmeticException e) {
        System.out.println(e.getMessage());
     }
  }
}
}

вот результат теста:

result 1024.0
result 19683.0
Exponent cannot be less than zero
result Infinity
result 8.112963841460668E31

мой вопрос: как я могу получить «бесконечность результата», чтобы сказать что-то еще через ArithmeticException, обрабатывающее что-то вроде «Переполнение с плавающей запятой»?

заранее спасибо.


person davedno    schedule 07.12.2014    source источник
comment
Не понятно, о чем вы спрашиваете. Вы хотите создать исключение, если результат бесконечен? Хотите знать, как проверить, бесконечен ли результат?   -  person Radiodef    schedule 08.12.2014
comment
Выбросить исключение, когда результат бесконечен   -  person davedno    schedule 08.12.2014
comment
Ну, ясно, что вы знаете, как генерировать исключение. Возможно, вы можете отредактировать свой вопрос, чтобы уточнить, с чем у вас возникли проблемы.   -  person Radiodef    schedule 08.12.2014


Ответы (2)


Не уверен, что это то, что вы ищете, но вы также можете проверить бесконечность/переполнение с помощью оператора if:

if( mfloat == Float.POSITIVE_INFINITY ){

    // handle infinite case, throw exception, etc.
}

Итак, в вашей ситуации вы бы сделали что-то вроде этого:

public static double 
Power(double base, int exp) throws IllegalArgumentException
{  

    if(exp < 0){
        throw new IllegalArgumentException("Exponent less than zero");
    }
    else if(exp == 0){
        return 1;
    }
    else{

        double returnValue = base * Power(base, exp-1);
        if(returnValue == Double.POSITIVE_INFINITY)
            throw new ArithmeticException("Double overflowed");

        return returnValue;

    }
}
person Joel    schedule 07.12.2014
comment
Вместо mfloat мне понадобится переменная, которая представляет значение после выполнения уравнения, и именно здесь я застрял - person davedno; 08.12.2014
comment
Благодарю вас! Это все, о чем я просил, спасибо за помощь, принял ваш ответ - person davedno; 08.12.2014

Когда вы поймаете исключение, здесь

catch (ArithmeticException e) {
    System.out.println(e.getMessage());
 }

просто делать

System.out.println("Floating point Overflow")

также (если вы хотите добавить больше) или замените первый отпечаток этим утверждением

Таким образом, как вы сказали, «вы получаете бесконечность результата», чтобы сказать что-то еще с помощью обработки ArithmeticException».

person committedandroider    schedule 07.12.2014
comment
Вы имеете в виду тестовый класс, это не говорит мне, как его поймать через класс мощности, я не использую try and catch - person davedno; 08.12.2014
comment
в своем тестовом классе вы используете try catch - person committedandroider; 08.12.2014