###前提・実現したいこと
JSPで乱数を使おうと考えています。
ツールはeclipse Version: Mars.2 Release (4.5.2)を使用しています。
JSPページにて乱数を2つ表示し、それらを足した答えを
テキストボックスに入力してもらい、答え合わせをするプログラムです。
もし未入力だった場合には、エラーにせず同じ問題画面をもう一度
表示したいと考えています。
未入力のとき、JSP⇒サーブレット⇒JSPと遷移すると
乱数が再生生成され、問題が変わってしまいます。
ここを変えずに、未入力の場合には同じ問題を出題し、
テキストボックス欄に何かしら入力されていれば
別の問題へ移るというプログラムを作りたいです。
いくらか調べてみたのですが、理解できなかったのでご質問させていただきました。
###該当のソースコード
Java
1''''JSP'''''''''''''''''''''''''' 2<%@ page language="java" contentType="text/html; charset=UTF-8" 3 pageEncoding="UTF-8"%> 4<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5<html> 6<head> 7<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 8<title>足し算演算ゲーム</title> 9</head> 10<!-- JavaBeansオブジェクトを生成 --> 11> 12<jsp:useBean id="addbean" class="addBean.AddBean" scope="session" /> 13<jsp:useBean id="ransuu" class="addBean.AddBean" scope="page"/> 14 <body> 15 ######################################################################## 16 <br> 17 <font size="5">足し算演習ゲーム</font> 18 <br> 19 <br> 20 21 <table border="1" width="100%"> 22 <tr> 23 <%-- requestスコープを持つ、JavaBeansオブジェクトaddbeanを 24 通して、JavaBeansに保存されたデータを参照します。 --%> 25 <td align="center">残り<jsp:getProperty name="addbean" 26 property="times" />問 27 <td align="right"><jsp:getProperty name="addbean" 28 property="userName" /></td> 29 </tr> 30 </table> 31 計算問題 32 <br> 33 <%=ransuu.getRan1()%> 34 + 35 <%=ransuu.getRan2()%> 36 = 37 <form method="GET" action="./AddAnswerServlet"> 38 <input type="text" name="answer"> <input type="submit" 39 name="nextButton" value="決定して次へ"> 40 </form> 41 </body></html> 42```'''''''''''''''''''''''' 43''''サーブレット''''''''''''''''''''''''''''''''''''''''''''''''''''''' 44package addServlet; 45 46import java.io.IOException; 47 48import javax.servlet.RequestDispatcher; 49import javax.servlet.ServletException; 50import javax.servlet.annotation.WebServlet; 51import javax.servlet.http.HttpServlet; 52import javax.servlet.http.HttpServletRequest; 53import javax.servlet.http.HttpServletResponse; 54import javax.servlet.http.HttpSession; 55 56import addBean.AddBean; 57 58/** 59 * Servlet implementation class AnswerServlet 60 */ 61@WebServlet("/AddAnswerServlet") 62public class AddAnswerServlet extends HttpServlet { 63 private static final long serialVersionUID = 1L; 64 private static int sum = 0; 65 String forward = null; 66 67 /** 68 * @see HttpServlet#HttpServlet() 69 */ 70 public AddAnswerServlet() { 71 super(); 72 // TODO Auto-generated constructor stub 73 } 74 75 /** 76 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse 77 * response) 78 */ 79 protected void doGet(HttpServletRequest request, HttpServletResponse response) 80 throws ServletException, IOException { 81 try{ 82 AddBean addbean; 83 HttpSession session = request.getSession(); 84 85 addbean = (AddBean) session.getAttribute("addbean"); 86 if (addbean == null) { 87 forward = "/jsp.add.error/addErrorSession.jsp"; 88 } 89 90 // 正しい答えを呼び出す 91 int result = addbean.getResult(); 92 93 // 正誤チェック 94 // AddBeanから計算に用いられる二つの数値を呼ぶ 95 // それらを足し合わせた計算結果が回答とあっているか確かめる 96 // あっていれば、正解数カウント+1 97 // 間違っていれば正解数カウント+0 98 String strAnswer = request.getParameter("answer"); 99 if (strAnswer != null) { 100 int answer = Integer.parseInt(strAnswer); 101 if (answer == result) { 102 sum++; 103 addbean.setSum(sum); 104 } else { 105 } 106 } 107 // 問題数分回す 108 // AddBeanから問題数を取得する 109 // times>0ならもう一度問題画面へ 110 // times==0なら、計算結果画面へ 111 // timesに入力された値が上2つ以外のものであれば、エラー画面へ 112 113 int times = addbean.getTimes(); 114 if(times>0){ 115 forward = "/jsp.add/addAnswer.jsp"; 116 times--; 117 addbean.setTimes(times); 118 }else if(times==0){ 119 forward = "/jsp.add/addResult.jsp"; 120 }else{ 121 forward = "/jsp.add.error/addErrorNumberOutOfRange.jsp"; 122 } 123 124 }catch(Exception e){ 125 forward = "/jsp.add/addAnswer.jsp"; 126 }finally{ 127 RequestDispatcher dispatcher = request.getRequestDispatcher(forward); 128 dispatcher.forward(request, response); 129 } 130 } 131 132 /** 133 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 134 * response) 135 */ 136 protected void doPost(HttpServletRequest request, HttpServletResponse response) 137 throws ServletException, IOException { 138 // TODO Auto-generated method stub 139 doGet(request, response); 140 } 141 142} 143''''''''''''''''''''''''''''''''''''''''''''''''''''' 144''''JavaBeans'''''''''''''''''''''''''''''' 145package addBean; 146 147import java.util.Random; 148 149public class AddBean { 150 151 private String userName=null; 152 153 private String userPassword=null; 154 155 private int times; 156 157 Random rnd = new Random(); 158 private int ran1 = rnd.nextInt(99)+1; 159 private int ran2 = rnd.nextInt(99)+1; 160 161 private int result = ran1 + ran2; 162 163 private int sum = 0; 164 165 public String getUserName() { 166 return userName; 167 } 168 169 public void setUserName(String userName) { 170 this.userName = userName; 171 } 172 173 public String getUserPassword() { 174 return userPassword; 175 } 176 177 public void setUserPassword(String userPassword) { 178 this.userPassword = userPassword; 179 } 180 181 public int getTimes() { 182 return times; 183 } 184 185 public void setTimes(int times) { 186 this.times = times; 187 } 188 189 public int getRan1() { 190 return ran1; 191 } 192 193 public void setRan1(int ran1) { 194 this.ran1 = ran1; 195 } 196 197 public int getRan2() { 198 return ran2; 199 } 200 201 public void setRan2(int ran2) { 202 this.ran2 = ran2; 203 } 204 205 public int getResult() { 206 return result; 207 } 208 209 public int getSum() { 210 return sum; 211 } 212 213 public void setSum(int sum) { 214 this.sum = sum; 215 } 216 217 218} 219 220 221###試したこと 222ネットで調べてscopeを変えてみたりしたのですが、うまくいきませんでした。 223 224###補足情報(言語/FW/ツール等のバージョンなど) 225Java 226Tomcat 8.0 227eclipse Version: Mars.2 Release (4.5.2)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/05/06 07:55