Math.sqrt (-5) -> Исключение силы в JSP? - PullRequest
1 голос
/ 28 ноября 2009

У меня 3 .jsp файла. index.jsp и sqrtcalculator.jsp и error.jsp.

В index.jsp есть текстовое поле и кнопка. В sqrtcalculator.jps есть калькулятор.

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

<%= request.getAttribute("javax.servlet.error.request_uri") %>
<%= exception.getMessage() %>
<%= exception %>

и т.д.

Проблема в том, что когда я ввожу -5 в текстовое поле, я не могу получить исключение, потому что Math.sqrt (-5) не возвращает ошибку, а "NaN".

Как я могу заставить это быть исключением? Идея состоит в том, чтобы перенаправить пользователя на отдельный файл error.jsp и отобразить ошибки. Но, как я уже сказал, Math.sqrt (-5) не возвращает ошибок или исключений, а только текстовую строку «NaN».

Я не хочу что-то подобное, только к вашему сведению

<%if (NaN){
%>
<p>Nope, Square root from negative numbers is not defined!</p>
<%}
%>

Ответы [ 6 ]

2 голосов
/ 28 ноября 2009

Внимание! Тест на NaN в предыдущем ответе неверен (NaN НЕ равен самому себе). В Java лучший способ проверить NaN -

if (Double.isNaN(answer)) {
  // throw exception
}

альтернативно

if (answer != answer) {
}

Хотя эта вторая версия будет работать, она непонятно, кто не знает о странном поведении NaN.

1 голос
/ 28 ноября 2009

Как насчет:

if (x >= 0.0) {
    return Math.sqrt(x);
} else {
    throw new ArithmeticException("Square root from negative numbers is not defined!");
}

Обратите внимание, что ArithmeticException является подклассом RuntimeException и поэтому не нуждается в объявлении в предложении throws вашей функции.

1 голос
/ 28 ноября 2009

Предположительно, он возвращает NaN, потому что квадратные корни отрицательных чисел действительно определены, они просто не действительные числа Есть ли причина, по которой вы не можете этого сделать?

if(Double.isNaN(answer))
    throw new ArithmeticException("Answer unreal");

Это должно щекотать ваш код обработки исключений, но исходная строка может быть только в нескольких строках. Я никогда не писал JSP, но это имеет смысл в Java.

0 голосов
/ 28 ноября 2009

Я не могу заставить его работать ....

   if (d < 0){
        throw new Exception("Negative Numbers not possible!");
   } 

d - это двойное чтение через d_string = request.getParameter ("numberfromtextfield") и преобразованное в удвоение через double d = Double.parseDouble (d_string);.

Вот что Eclipse говорит мне: http://pastebin.ca/1691409

0 голосов
/ 28 ноября 2009

Я бы спросил, почему вы используете скриптлеты в JSP.

Если ваше приложение действительно состоит из трех страниц (index.jsp и sqrtcalculator.jsp и error.jsp), то возможно это оправданно.

Но моя общая рекомендация - держаться подальше от кода скриптлета в JSP и отдавать предпочтение JSTL. Сделайте эти вычисления в серверном компоненте, используя схему MVC Model-2.

Если ваше приложение на самом деле состоит всего из трех страниц, его реструктуризация для использования MVC Model-2 не составит труда. Вы можете обнаружить, что это намного более расширяемо. Если вы не знакомы с Model-2 MVC, вы можете прочитать об этом здесь . Если вы знакомы с ним, это может быть самостоятельной проблемой, которая достаточно мала, чтобы вы могли увидеть, где она может принести какую-то пользу в будущих проектах.

Другая мысль состояла бы в добавлении комплексных чисел в ваш калькулятор, потому что квадратный корень из отрицательных чисел действительно является верным понятием. Это просто требует мнимых чисел. Может быть, ваш калькулятор должен быть расширен, чтобы максимизировать полезность.

0 голосов
/ 28 ноября 2009

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

if (NaN == result)
  throw new Exception("NaN");

вам придется настроить if;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...