- ベストアンサー
再:助けてください
消されてしまったので、もう一回w。 数字当てゲームを作ってコンパイルは出来たのですが、思い通りに動作しません。思い通りというのは数字を入力した後、判定する画面に飛ばしたいのですが、入力した数字が消えてしまいます。下にソースをさらします。で、800文字の字数制限がありますので、ソースの続きはどなたかが書き込んだ後、そこに補足と言う形で追加します。どなたかご教授願います。 <%@ page contentType="text/html;charset=Shift_JIS" %> <% int num;//正解の数字 boolean isRight;//解答が正解かどうか Integer numInt=(Integer)session.getAttribute("num");// Boolean isRightBoo=(Boolean)session.getAttribute("isRight");// if(numInt==null || isRightBoo==null){ //sessionオブジェクトに正解の情報がない isRight=true; }else{ //sessionオブジェクトより取得した値を使う isRight=isRightBoo.booleanValue(); } if(isRight){ //既に正解済、新たな正解の数字を乱数で決める num=(int)(Math.random()*13+1); isRight=false; session.setAttribute("num",new Integer(num)); session.setAttribute("isRight",new Boolean(isRight)); }else{ //sessionオブジェクトより取得した正解を使う num=numInt.intValue(); } %>
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
Lhacaさん、こんにちは。 最初に提示されたソースを元にしますと、 String s=request.getParameter("Intnum"); で、Intnumという名前で受け取るはずが、 <input type="text"name="answer"> ここで、answerと設定されているため、 Intnumには何も設定されず、数字が表示されません。 out.printlnしてみるとnullが表示されます。 ですから、Intnumをanswerに変えてあげれば、入力した 数値が受け取れます。 numに乱数で設定することを言い忘れていましたが、今回のソースでは直ってますね。 私の環境で試した限りでは正常に動きました。
その他の回答 (4)
- pcbeginner
- ベストアンサー率46% (261/560)
なんとなーく追ってみました。 ボタン押したら、入力された数字をリクエストかセッションに格納しないとダメじゃない?
お礼
そうですよね。次に進むには格納しなきゃいけないんですが、それが分からないんですよ。sessionを良く見直します。ありがとうございます。
- pcbeginner
- ベストアンサー率46% (261/560)
はい。表示されました。 載せられたjspのファイル名が GuessNumber.jsp とは知らなかったので、GuessNumber.jspという単なる文字列を表示する簡単なjspをを作って、 問題のjspはoshiete.jspとして自PCで試しましたが、クエリ送信ボタンを押下すると、簡単なjspのGuessNumber.jspが表示されました。 ちなみに、ページコンパイルされたhtmlは <html> <head> <title>Sample No11 Application</title> </head> <body> <h1>数字当てゲーム</h1> <br> <hr> 1~13の数字を当ててください<br> <form action="GuessNumber.jsp;jsessionid=FFC3758B6125AEF8F4D7023413CAE244"> <input type="text"name="answer"> <input type="submit"> </form> </body> </html> ですね。 GuessNumber.jspが自分自身なので、数字が消えてしまうのでは? 数字を消したくなければ、クエリ送信ボタン押下処理で、 入力された数字をリクエストに埋め込んで、 テキストフィールドにリクエストに埋め込まれた数字があれば表示、なければ表示しない。 という処理を入れないとダメなのでは?
- pcbeginner
- ベストアンサー率46% (261/560)
前回質問されたソースで試しましたが、 GuessNumber.jsp というjsp(中身は単純な文字列のみ表示)を作成して、 数字を入力→クエリ送信ボタン押下 でちゃんと表示されましたけど? もしかして、ここに載せてるjspのファイル名が GuessNumber.jsp という名前だったりとかするのですかね??? だとしたらこの回答は間違いかも。
補足
え!? 表示されました?それは最初とは違う画面に移るということですよね?私の方では「クエリ送信」を押しても無反応なんですが。。。。 ここに載せたファイル名はGuessNumber.jspです。
ソースが途中じゃないですか? ソースは全部書き込まないと分からないですよ。
補足
質問の続き <html><head><title>Sample No11 Application</title> </head><body><h1>数字当てゲーム</h1><br><% int ans; //requestオブジェクトからパラメータを(解答)を受け取る String s=request.getParameter("Intnum"); if(s!=null){ try{ ans=Integer.parseInt(s); if(num==ans){ //解答と正解が一致 isRight=true; HttpSession hs = request.getSession(true); out.println("<p>正解!</p>"); }else if(num>ans&&ans>=1){ //解答が正解より小さい out.println("<p>もっと上の数字です</p>"); }else if(num<ans&&ans<=13){ //解答が正解より大きい out.println("<p>もっと下の数字です</p>"); }else{ //解答が1~13の数字以外 out.println("<p>数字は1~13の範囲です</p>"); } }catch(NumberFormatException e){ //数字以外をフォームから受け取ったときの例外処理 out.println("<p>数字は整数で入力してください</p>"); } } %> <hr> <% String NextPage="GuessNumber.jsp"; NextPage=response.encodeURL(NextPage); if(!isRight){ //解答と正解が不一致 %> 1~13の数字を当ててください<br> <form action="<%=NextPage%>"> <input type="text"name="answer"> <input type="submit"> </form> <% }else{ //解答と正解が一致 %> <a href="<%=NextPage%>">もう一度する</a> <% } %> </body> </html> >momoti89さん すみません。字数があるそうなので、こういう形で追加させていただきます。 以上がソースです。みなさまご教授願います。
お礼
ありがとーございました!! 私の環境でも動きました。