java Servlets添加2个数字
我的java文件如下----- 我的html文件如下----java Servlets添加2个数字,java,servlets,Java,Servlets,我的java文件如下----- 我的html文件如下---- 请给我正确的代码,这样它可以添加2个数字。您会得到一个NumberFormatException,因为Integer.parseInt(String)在String参数无法转换为整数时抛出它。看 如果不希望抛出异常,则需要将整数解析包装在try-catch中并处理异常,或者提前检查提供的字符串是否确实是整数 还要好好看看你的表格。你有 <form action="add"> Enter 1st nu
请给我正确的代码,这样它可以添加2个数字。您会得到一个
NumberFormatException
,因为Integer.parseInt(String)
在String
参数无法转换为整数时抛出它。看
如果不希望抛出异常,则需要将整数解析包装在try-catch中并处理异常,或者提前检查提供的字符串是否确实是整数
还要好好看看你的表格。你有
<form action="add">
Enter 1st number: <input type="text" name=num1><br>
Enter 2nd number: <input type="text" name=num1><br>
<input type="submit">
</form>
例如:
String num1 = req.getParameter("num1");
String num2 = req.getParameter("num2");
try {
int i = Integer.parseInt(num1);
int j = Integer.parseInt(num2);
int k = i + j;
// TODO do something with k
} catch (NumberFormatException e) {
// log exception and / or notify user
System.out.println("At least one invalid number in the given numbers: " + num1 + ", " + num2);
e.printStackTrace();
// show an error message to the user somewhere in your frontend
req.setAttribute("error", "your error message");
}
编辑
正如评论中指出的,我选择捕获未检查的异常NumberFormatException
,记录它并在请求中设置一个属性,以向用户显示一条有意义的错误消息
我之所以这样做,是因为如果输入的数字中至少有一个不可解析为整数值,那么就让未经检查的异常冒泡出来,这样就必须进一步处理该异常,以便显示对用户有意义的内容,而不是一般的内部服务器错误消息
使用上述逻辑的替代方法是使用regex验证每个整数的输入
此处未涉及的另一个验证考虑是溢出的可能性。这可能发生在两种情况下:
用户输入一个大于integer.MAX\u值的整数
用户输入两个整数,其总和大于Integer.MAX\u VALUE
例如,在第一种情况下
System.out.println(Integer.parseInt("" + (Integer.MAX_VALUE + 1)));
将打印-2147483648
在第二种情况下
int a = Integer.parseInt("" + (Integer.MAX_VALUE));
int b = Integer.parseInt("" + (Integer.MAX_VALUE));
System.out.println(a + b);
将打印-2
。在这两种情况下,结果都应该是肯定的。您会得到一个NumberFormatException
,因为Integer.parseInt(String)
会在String
参数无法转换为整数时抛出它。看
如果不希望抛出异常,则需要将整数解析包装在try-catch中并处理异常,或者提前检查提供的字符串是否确实是整数
还要好好看看你的表格。你有
<form action="add">
Enter 1st number: <input type="text" name=num1><br>
Enter 2nd number: <input type="text" name=num1><br>
<input type="submit">
</form>
例如:
String num1 = req.getParameter("num1");
String num2 = req.getParameter("num2");
try {
int i = Integer.parseInt(num1);
int j = Integer.parseInt(num2);
int k = i + j;
// TODO do something with k
} catch (NumberFormatException e) {
// log exception and / or notify user
System.out.println("At least one invalid number in the given numbers: " + num1 + ", " + num2);
e.printStackTrace();
// show an error message to the user somewhere in your frontend
req.setAttribute("error", "your error message");
}
编辑
正如评论中指出的,我选择捕获未检查的异常NumberFormatException
,记录它并在请求中设置一个属性,以向用户显示一条有意义的错误消息
我之所以这样做,是因为如果输入的数字中至少有一个不可解析为整数值,那么就让未经检查的异常冒泡出来,这样就必须进一步处理该异常,以便显示对用户有意义的内容,而不是一般的内部服务器错误消息
使用上述逻辑的替代方法是使用regex验证每个整数的输入
此处未涉及的另一个验证考虑是溢出的可能性。这可能发生在两种情况下:
用户输入一个大于integer.MAX\u值的整数
用户输入两个整数,其总和大于Integer.MAX\u VALUE
例如,在第一种情况下
System.out.println(Integer.parseInt("" + (Integer.MAX_VALUE + 1)));
将打印-2147483648
在第二种情况下
int a = Integer.parseInt("" + (Integer.MAX_VALUE));
int b = Integer.parseInt("" + (Integer.MAX_VALUE));
System.out.println(a + b);
将打印-2
。在这两种情况下,结果都应该是肯定的。尝试添加三个或四个数字,而不仅仅是两个。我想这会帮助你了解出了什么问题。试着加上三到四个数字,而不是两个。我认为它将帮助您理解出错的原因。您似乎正在解析请求参数“num2”,但在html中,您的输入仅重复了“num1”
因此,在servlet中,您正在请求不存在的参数“num2”,给出一个null值,并给出异常java.lang.NumberFormatException:null
首先,您需要更正HTML输入,我们鼓励您使用try-catch块在servlet中解析这些输入值(以处理不同的情况:空值、非数字、浮点值等)。您似乎正在解析请求参数“num2”,但在HTML中,您的输入只重复了“num1”
因此,在servlet中,您正在请求不存在的参数“num2”,给出一个null值,并给出异常java.lang.NumberFormatException:null
首先,您需要更正HTML输入,我们鼓励您使用try-catch块来解析servlet中的输入值(以处理不同的情况:空值、非数字、浮点值等)。正如大多数答案已经指出的,问题在于表单本身
但是在查看了所有的答案之后,有一件事受到了大多数答案的鼓励——在try/catch块中处理未检查的异常(在本例中为java.lang.NumberFormatException)
请注意!未经检查的异常永远不会在try/catch块内处理(即使您想消除异常)。您需要意识到,处理未经检查的异常的想法只有在获得错误数据后才会产生。它会导致服务器正常运行,返回错误的结果,并使跟踪错误变得非常困难
如果没有这些数据,甚至无法猜测可能发生的异常。所以请不要鼓励在try/catch块中处理未检查的异常。如果您确实想处理未检查的异常,请使用验证(例如,条件)进行处理。这样,您将确保数据将根据您的需求通过特定条件,并且您可以检查是否存在无效输入
注意:抛出这样的异常更是灾难性的。正如大多数答案已经指出的那样,问题在于表单本身
但是有我
int a = Integer.parseInt("" + (Integer.MAX_VALUE));
int b = Integer.parseInt("" + (Integer.MAX_VALUE));
System.out.println(a + b);