Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java Servlets添加2个数字_Java_Servlets - Fatal编程技术网

java Servlets添加2个数字

java Servlets添加2个数字,java,servlets,Java,Servlets,我的java文件如下----- 我的html文件如下---- 请给我正确的代码,这样它可以添加2个数字。您会得到一个NumberFormatException,因为Integer.parseInt(String)在String参数无法转换为整数时抛出它。看 如果不希望抛出异常,则需要将整数解析包装在try-catch中并处理异常,或者提前检查提供的字符串是否确实是整数 还要好好看看你的表格。你有 <form action="add"> Enter 1st nu

我的java文件如下-----

我的html文件如下----


请给我正确的代码,这样它可以添加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);