Math.sqrt(-5) - >在JSP中强制异常?

时间:2009-11-28 17:29:35

标签: exception math jsp exception-handling

我有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”文本字符串。

我不想要这样的东西只是FYI

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

6 个答案:

答案 0 :(得分:2)

警告,上一个答案中对NaN的测试是错误的(NaN不等于它自己)。在Java中,测试NaN的更好方法是

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

替代地

if (answer != answer) {
}

虽然第二个版本可行,但肯定会让那些不了解NaN奇怪行为的人感到困惑。

答案 1 :(得分:1)

它可能会返回NaN,因为确实定义了负数的平方根,它们只不是实数。你有什么理由不能这样做吗?

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

这应该是你的异常处理代码,但源代码行可能只是几行。我从来没有编写JSP,但这在Java中是有意义的。

答案 2 :(得分:1)

怎么样:

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

请注意ArithmeticExceptionRuntimeException的子类,因此不需要在函数的throws子句中声明。

答案 3 :(得分:0)

我在jsp方面不是很好但是你应该能够使用基本的java代码..所以我会检查我的NaN结果并抛出异常

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

你必须调整if;)

答案 4 :(得分:0)

我会问为什么你在JSP中使用scriptlet。

如果你的应用程序真的只有三个页面(index.jsp和sqrtcalculator.jsp和error.jsp),那么可能它是合理的。

但我的一般建议是远离JSP中的scriptlet代码并且更喜欢JSTL。使用Model-2 MVC安排在服务器端组件中完成这些计算。

如果您的应用程序实际上只包含三个页面,那么重新构建它以使用Model-2 MVC并不困难。您可能会发现它的扩展性更强。如果您不熟悉Model-2 MVC,可以阅读它here。如果你熟悉它,这可能是一个自足的问题,它足够小,可以让你看到它可以在未来的项目中提供一些价值。

另一种想法是将复数添加到计算器中,因为负数的平方根确实是一个有效的概念。它只需要虚数。也许你的计算器需要扩展以最大限度地提高实用性。

答案 5 :(得分:0)

我似乎无法让它发挥作用......

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

d是通过d_string = request.getParameter(“numberfromtextfield”)进行的双重读取,并通过double d = Double.parseDouble(d_string);转换为double。

这就是Eclipse告诉我的:http://pastebin.ca/1691409