如何仅在会话更改时生成随机数

时间:2015-12-01 18:54:48

标签: jsp session random

这里我使用JSP生成随机数并计算它们的总和和平均值。我没有使用过会话。但是,如何实现会话,使得仅在新会话中生成的新随机数和在第一个会话中生成的随机数在整个页面刷新期间保留。

这是代码

<%@page import="java.util.Date"%>
<%@page import="java.util.Random"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Working Title</title>
    </head>
    <body>
        <h1>Experiment</h1>
        <%
            Date createTime = new Date(session.getCreationTime());
            Date lastAccessTime = new Date(session.getLastAccessedTime());

            int r = 25, c = 5, n;
            double t=0;
            int i=0,j=0;
            double num[][] = new double[27][5];
            Random ran = new Random();
            out.print("<table border='1px'>");
            out.print("<tr><th>Trial-1</th><th>Trial-2</th><th>Trial-3</th><th>Horizontal Sum</th><th>Horizontal Average</th></tr>");
            for(i=0;i<r;i++) {
                t=0;
                out.print("<tr>");
                for(j=0;j<c-2;j++) {
                    n = ran.nextInt(10-1+1)+1;
                    num[i][j]=n;
                    t = t+ n;
                    out.print("<td>"+ n +"</td>");
                }
                num[i][3]=t;
                num[i][4]=t/3;
                out.print("<td>"+ t +"</td> "+ "<td>"+ t/3+"</td> ");
                out.println("</tr>");
            }
            for(i=0;i<c;i++) {
                t=0;
                for(j=0;j<r;j++) {
                    t = t + num[j][i];
                }
                num[j][i]=t;
                num[j+1][i]=t/25;
            }
            for(i=25;i<27;i++) {
                out.print("<tr>");
                if(i==25)
                    out.print("<th colspan='3'>Vertical Sum</th>");
                if(i==26)
                    out.print("<th colspan='3'>Vertical Average</th>");
                for(j=3;j<c;j++) {
                    out.print("<td>"+ num[i][j]+"</td>");
                }
                out.println();
                out.print("</tr>");
            }
            out.print("</table>");
        %>
    </body>
</html>

编辑:我将会话时间转换为毫秒并将其作为种子提供给Random类。如果有人想知道将来如何做到这一点。

1 个答案:

答案 0 :(得分:0)

基本上,您需要检查并设置一些会话属性,以确定会话是否是新的。类似的东西:

<%
String flag = (String)session.getAttribute("randomNumbersWereGenerated");
if(flag==null)
{
  //this is a new session 
  //since the flag is not yet set
  generateRandomNumbers(); //pseudo-code
  session.setAttribute("randomNumbersWereGenerated", "true");
}
else
{
   retrieveAndUseRandomNumbersFromSession(); //pseudo-code
}
%>

听起来您还想将随机数保存到会话中。为此,您可能希望将它们放入类似List / LinkedList的数据类型而不是数组。

所以在生成随机数时:

LinkedList list = new LinkedList();
list.add(...);
...
session.setAttribute("randomNumsList", list);

从会话中检索它们:

LinkedList list = (LinkedList)session.getAttribute("randomNumsList");