zoukankan      html  css  js  c++  java
  • JSP第二次作业:使用session记录次数的猜数游戏

    作业:猜数
    生成一个随机整数(范围:[1-100],包含1和100),用户猜这个数。
    两个页面:
    第一个页面:
        生成一个随机数,页面显示:告知一个信息(生成一个随机整数,范围[1-100],现在开始猜这个数)
        有一个接收数据的文本框和提交按钮
    第二个页面:
        显示用户的猜测结果:
        正确时:显示恭喜您猜对了!要猜的数是xxx,您输入的数是xxx,您一共猜了xxx次!
                      欢迎您再玩一次!(超链接到第一个页面)
        错误时:显示您猜错了,猜大了/猜小了!
                      请输入您的猜的数:文本框
                      提交按钮 ====>第二个页面

    思想:使用session对象存放随机数与猜测次数,故随机数肯定要放在第一个界面生成。

    第一个JSP界面:(one.jsp)

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@ page import="java.util.*"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<form name="f1" method="post" action="two.jsp">
    		随机数生成成功!范围[1,100],现在开始猜这个数:
    		<input	type="text" name="num1">
    		<input type="submit" name = "sub" value="确定">
    	</form>
    	<%  //因为生成的随机数只有在返回第一个页面时才会重新生成所以写在第一页面
    		int num = (int) (Math.random() * 100) + 1;
    		session.setAttribute("num", num);
    		session.setAttribute("s", new Integer(0));
    	%>
    </body>
    </html>
    

      

    第二个JSP界面:(two.jsp)

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@ page import="java.util.*"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<%
    		String str = request.getParameter("num1");//获取第一页输入的数(字符串)
    		int num = (int) session.getAttribute("num");//获取随机数
    		int n = (int) session.getAttribute("s");//获取输入次数
    		if(str != null) {
    			int num1 = Integer.parseInt(str);//将第一页输入的数(字符串)转换为真的数
    			
    			if (num1 == num) {
    				out.print("恭喜您猜对了!要猜的数是" + num + ",您输入的数是" + num1 + ",您一共猜了" + n + "次!");
    				out.print("<br><br><a href="one.jsp">欢迎再玩儿一次</a>");//执行第一页代码session会自动重置
    			} else if (num1 > num) {
    				out.print("您猜错了,猜大了!");
    	%>
    	<br><br>
    	<form name="f1" method="post" action="">
    		请输入您猜测的数: <input type="text" name="num1"> 
    		<input type="submit" name="sub" value="确定">
    	</form>
    	<%   //form表单提交后会自动刷新第二个页面
    		    str = request.getParameter("num1");
    			num1 = Integer.parseInt(str);
    			} else if (num1 < num) {
    				out.print("您猜错了,猜小了!");
    	%>
    	<br><br>
    	<form name="f1" method="post" action="">
    		请输入您猜测的数: <input type="text" name="num1">
    		<input type="submit" name="sub" value="确定">
    	</form>
    	<%   //form表单提交后会自动刷新第二个页面
    		    str = request.getParameter("num1");
    			num1 = Integer.parseInt(str);   //重新获取输入的数
    			}
    			
    			n++;
    			session.setAttribute("s", n);//猜测次数+1后存入session中
    		}
    	%>
    </body>
    </html>
    

      注释的很详细仅仅代表我现在的理解...还有很多不明白的问题,但它居然居然实现了,没有出bug!!!那就不管了哈哈哈

    比如:在猜错数后页面二重新提交form表单,我推测这个操作会使页面二自动刷新掉。

    可是num1居然真的能存重新提交的值,而不会通过代码前面的request方法获取页面一的num1值。

    那么我就继续推测request方法默认是只能获取一次的好了~~~~~~~合理!

    欢迎大佬指教~~~感激不尽!

  • 相关阅读:
    vim——打开多个文件、同时显示多个文件、在文件之间切换(转)
    内核任务调度与数据结构
    chrome浏览器iframe兼容性问题,隐藏起来再显示滚动条消失?
    九、迭代器、生成器、函数递归调用与二分法
    八、函数、闭包、装饰器
    七、函数
    六、字符编码、文件
    五、列表、元组、字典、集合详解
    四、字符串及其内置方法
    三、内存管理、数据类型、基本运算符、流程控制
  • 原文地址:https://www.cnblogs.com/thx2199/p/14697561.html
Copyright © 2011-2022 走看看