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