这次的四则运算,是基于上次的java基础上改的。
1.思路:现有三个页面
页面一:index.jsp 输入总题数:count,输入出题每行的个数:rcount;
将action=“show.jsp”中
页面二:show.jsp 显示随机产生的式子
用request接受 将所填写的结果存入到result[],将正确答案存入到answer[],将随机产生的式子存入到posture[];
页面三:judge.jsp 判断答案
关键点: String results[]=request.getParameterValues("results");
String answer[]=request.getParameterValues("answer");
index.jsp源码:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>四则运算自动出题界面</title> <style> .name{ align:center; font-size:20px; font-color:black; } </style> </head> <body type="text" style="background:url(img/child.jpg); background-size:100%"> <form action="show.jsp" action="judge.jsp" method="post" onsubmit="return checkAll()" aglin="center"> <div class="name"> <h2>随机四则运算选题界面</h2> <table> <tr> <td>请输入你需要测试的题目数量:</td> <td><input type="text" name="count" id="count" placeholder="题目总数量" onchange="checkCount()"></td> </tr> <tr> <td>请输入每行的出题数量(最多是4个):</td> <td><input type="text" name="rcount" id="rcount" placeholder="每行的数量" onchang="checkRcount()"></td> </tr> <tr> <td><input type="submit" value="确定"></td> <td> <input type="reset" value="重置" onclick="formReset()"></td> </tr> </table> </div> </body> <script type="text/javascript"> function formReset() {//重置按钮处添加onclick调用formReset %> document.getElementById("form").reset(); } function checkCount(){ var count=document.getElementById("count"); var count_print=count.value; if(count_print==""){ alert("出题的总数不能为空,请重新输入!") count.focus(); return false; } else return true; } function checkRcount(){ var rcount=document.getElementById("rcount"); var rcount_print=rcount.value; if(rcount==""){ alert("每行的出题数不能为空,请重新输入!"); rcount.focus(); return false; } else return true; } function checkAll(){ var count=document.getElementById("count"); var count_print=count.value; var rcount=document.getElementById("rcount"); var rcount_print=rcount.value; if(count_print==""){ alert("出题的总数不能为空,请重新输入!") count.focus(); return false; } else return true; } if(rcount==""){ alert("每行的出题数不能为空,请重新输入!"); rcount.focus(); return false; } else { return true; } } </script> </html>
show.jsp源码:
<%@page import="org.omg.CORBA.portable.ValueBase"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <form action="judge.jsp" method="post"> <body type="text" style="background:url(img/child.jpg);background-size:100%"> <h2>题目如下:</h2> <% int count= Integer.parseInt(request.getParameter("count"));//得到前面index.jsp中输入的总题数 int rcount = Integer.parseInt(request.getParameter("rcount"));//得到前面index.jso中输入的一行中的个数 //request表示客户端向服务器发送的请求 //response表示服务器端对客户端的响应 String x = null; int stra[]=new int[100000];//产生符号前面的随机数组 int strb[]=new int[100000];//产生符号后面的随机数组 String[] posture=new String[1000000];//存放整个式子 int answer[]=new int[10000];//用于存放每个式子的正确答案 int result[]=new int[10000];//用于存放你输入的答案 int flag=1; aa: for(int i=1;i<=count;i++) { int a=(int)(1+Math.random()*99);//产生随机数 int b=(int)(1+Math.random()*99); int c=(int)(1+Math.random()*4); stra[i]=a; strb[i]=b; switch(c)//将c(随机数)表示为运算符号 { case 1:x="+";break; case 2:x="-";break; case 3:x="*";break; case 4:x="/";break; } for(int j=0;j<i;j++) { if(stra[j]==stra[i]&&strb[j]==strb[i]) flag=0; else flag=1; } if(flag==1) { if(a>=b&&(a%b)==0&&a*b<=100) { out.print(i+":"+a+x+b+"="+" "); posture[i]=i+":"+a+x+b+"="+" ";//将得到的式子存放到posture中 if(x=="+") answer[i]=a+b;//得到正确答案 else if(x=="-") answer[i]=a-b; else if(x=="*") answer[i]=a*b; else if(x=="/") answer[i]=a/b; //out.println(answer[i]); %> <input type="text" name="results" > <input type="hidden" name="answer" value=<%=answer[i] %>> <% //<input type="text" name="value[i] id="> //posture[i]=i+":"+a+x+b+"="+" "; } else { i--; continue; } if(i%rcount==0) { %> <pre> <% out.println();//1.print换行表示,必须使用<pre>标签 2.或者直接使用<br> %> </pre> <% } } } //session.setAttribute("answer1", answer); //session.setAttribute("count1", count); %> <input type="submit" value="提交(可查看结果)"> </form> </body> </html>
judge.jsp源码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>做题结果</title> </head> <body type="text" style="background:url(img/child.jpg); background-size:100%"> <form type="text" method="post"> <% String results[]=request.getParameterValues("results"); String answer[]=request.getParameterValues("answer"); int tr=0; int fa=0; for(int i=0;i<results.length;i++) { if(results[i].equals(answer[i])) { tr++;%> <p>第<%=i+1 %>题正确</p> <% } else{ fa++;%> <p>第<%=i+1 %>题错误,输入为<%=results[i] %>,正确答案为<%=answer[i] %></p> <% } } %> <h3>你答对了<%=tr %>题,答错了<%=fa %>题</h3> </form> </body> </html>
代码测试截图:
页面一:
页面二:
页面三:
遇到的问题:
页面er中所记录输入结果的数组result[]和记录正确答案的数组answer[],传不到页面三中的jsp中,始终显示500错误,
但是解决方法,在judge中,将两者定义为字符串
String results[]=request.getParameterValues("results");
String answer[]=request.getParameterValues("answer");