2014-12-07 8 views
-1

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

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

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); 

    } 
} 

} 

Heres класс Test:

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()); 
    } 
    } 
} 
} 

Heres выход теста:

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

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

благодарит заранее.

+0

Непонятно, что вы просите. Вы хотите исключить исключение, если результат бесконечен? Вы хотите знать, как проверить, является ли результат бесконечным? – Radiodef

+0

Выбросить исключение, когда результат бесконечен –

+0

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

ответ

0

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

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; 

    } 
} 
+0

Вместо mfloat мне понадобится переменная, которая представляет значение после выполнения уравнения, и вот где я застрял –

+0

Спасибо! Это все, что я просил о благодарности за помощь, принял ваш ответ –

1

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

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

вобще

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

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

Этот как вы сказали, «вы получаете бесконечность результата», чтобы сказать что-то еще через обработку арифметических исключений »

+0

Вы имеете в виду тестовый класс, это не говорит мне, как поймать его через класс мощности, я не использую try и catch –

+0

в вашем тестовом классе, вы используете try catch – committedandroider

 Смежные вопросы

  • Нет связанных вопросов^_^