Java Servlet年龄计算器给出错误的结果

Java Servlet年龄计算器给出错误的结果,java,servlets,Java,Servlets,我这里有一个问题,我试图根据一个人的年龄来计算他的月、周、日、时、分和秒数。我使用一个HTML表单来获取数据(姓名和年龄),并将其发送到一个servlet来计算上述结果。问题在于,当用户提供29岁或更小的年龄时,结果似乎是准确的,但当用户输入70岁或更大的值时,在秒数上给出了错误的负值。以下是我的servlet代码: package package1; import java.io.IOException; import java.io.PrintWriter; import javax.s

我这里有一个问题,我试图根据一个人的年龄来计算他的月、周、日、时、分和秒数。我使用一个HTML表单来获取数据(姓名和年龄),并将其发送到一个servlet来计算上述结果。问题在于,当用户提供29岁或更小的年龄时,结果似乎是准确的,但当用户输入70岁或更大的值时,在秒数上给出了错误的负值。以下是我的servlet代码:

package package1;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Servlet_Post_Example extends HttpServlet
{
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        String name = "";
        String $age = "";
        try
        {
            name = request.getParameter("name");
            $age = request.getParameter("age");
            int age = Integer.parseInt($age);
            int months = age * 12;
            int weeks = age * 52;
            int days = age * 365;
            int hours = 24 * 365 * age;
            int minutes = 60 * 24 * 365 * age;
            int seconds = 60 * minutes;
            out.println("<html>");
            out.println("   <head>");
            out.println("       <title>Servlet Get Response</title>");
            out.println("   </head>");
            out.println("   <body bgcolor=\"#AAFFAA\">");
            out.println("       <h1>"+name+" you are approximately "+months+" months old, "+weeks+" weeks old, "+days+" days old, "+hours+" hours old, "+minutes+" minutes old and "+seconds+" seconds old!</h1>");
            out.println("       <a href=\"index.html\">Click here</a> to go back to the index page.");
            out.println("   </body>");
            out.println("</html>");
        }
        catch(NumberFormatException xcp)
        {
            out.println("<html>");
            out.println("   <head>");
            out.println("       <title>Servlet Get Response</title>");
            out.println("   </head>");
            out.println("   <body bgcolor=\"#AAAAAA\">");
            out.println("       <h1 style=\"color: red\">There was an error! You must type the a valid integer for your age! You entered "+$age+"</h1>");
            out.println("       <a href=\"index.html\">Click here</a> to go back to the index page.");
            out.println("   </body>");
            out.println("</html>");
            //xcp.printStackTrace(out);
        }
        finally
        {
            out.close();
        }
    }
}
package1;
导入java.io.IOException;
导入java.io.PrintWriter;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
公共类Servlet_Post_示例扩展了HttpServlet
{
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException
{
response.setContentType(“text/html”);
PrintWriter out=response.getWriter();
字符串名称=”;
字符串$age=“”;
尝试
{
name=request.getParameter(“name”);
$age=request.getParameter(“age”);
int age=Integer.parseInt($age);
整数个月=年龄*12;
整数周=年龄*52;
整数天=年龄*365;
整小时=24*365*岁;
整数分钟=60*24*365*岁;
整数秒=60*分钟;
out.println(“”);
out.println(“”);
println(“Servlet获取响应”);
out.println(“”);
out.println(“”);
out.println(“+name+”您大约“+months+”月龄“+weeks+”周龄“+days+”天龄“+hours+”小时龄“+minutes+”分钟龄“+seconds+”秒龄!”);
println(“返回索引页”);
out.println(“”);
out.println(“”);
}
捕获(NumberFormatException xcp)
{
out.println(“”);
out.println(“”);
println(“Servlet获取响应”);
out.println(“”);
out.println(“”);
println(“出现错误!您必须键入适合您年龄的有效整数!您输入了“+$age+”);
println(“返回索引页”);
out.println(“”);
out.println(“”);
//xcp.printStackTrace(输出);
}
最后
{
out.close();
}
}
}

该网站是托管的,请查看,谢谢。

此行
int minutes=60*24*365*age
int秒=60*分钟
可能超过
整数的限制。最大值
。将分钟和秒声明为长

long minutes = 60L * 24 * 365 * age;// Add L for long
long seconds = 60 * minutes;

这行
int分钟=60*24*365*岁
int秒=60*分钟
可能超过
整数的限制。最大值
。将分钟和秒声明为长

long minutes = 60L * 24 * 365 * age;// Add L for long
long seconds = 60 * minutes;

这行
int分钟=60*24*365*岁
int秒=60*分钟
可能超过
整数的限制。最大值
。将分钟和秒声明为长

long minutes = 60L * 24 * 365 * age;// Add L for long
long seconds = 60 * minutes;

这行
int分钟=60*24*365*岁
int秒=60*分钟
可能超过
整数的限制。最大值
。将分钟和秒声明为长

long minutes = 60L * 24 * 365 * age;// Add L for long
long seconds = 60 * minutes;


您需要将分钟和秒的类型更改为“长”。那么它应该可以正常工作。因为任何大于2^31-1的int值都会导致溢出,而这个溢出是静默的,所以得到的是负值

您需要将分钟和秒的类型更改为“长”。那么它应该可以正常工作。因为任何大于2^31-1的int值都会导致溢出,而这个溢出是静默的,所以得到的是负值

您需要将分钟和秒的类型更改为“长”。那么它应该可以正常工作。因为任何大于2^31-1的int值都会导致溢出,而这个溢出是静默的,所以得到的是负值

您需要将分钟和秒的类型更改为“长”。那么它应该可以正常工作。因为任何大于2^31-1的int值都会导致溢出,而这个溢出是静默的,所以得到的是负值

我想这可能是因为一个人生命中的秒数将很快超过
int
所能容纳的最大容量。读取整数溢出。我尝试使用long来存储秒数,它仍然不起作用。请看@Masud的答案。我想这可能是因为一个人生命中的秒数将很快超过
int
所能容纳的最大容量。请阅读整数溢出。我尝试使用long来存储秒数,它仍然不起作用。请看@Masud的答案。我想这可能是因为一个人生命中的秒数将很快超过
int
所能容纳的最大容量。请阅读整数溢出。我尝试使用long来存储秒数,它仍然不起作用。请看@Masud的答案。我想这可能是因为一个人生命中的秒数将很快超过
int
所能容纳的最大容量。请阅读整数溢出。我尝试使用long来存储秒数,但仍然不起作用。请看@Masud的答案。