ちょっと先の未来クイズ第4問

3桁の数字を当てるhit&blowを作っています。
3桁の重複のない数字を発生させ、入力した数字と照合させ正解か不正解の判定までは出来ます。しかし、hitとblowの表示ができず苦しんでます。
アドバイス、参考になるサイト等を教えてください。
お願いします。

A 回答 (6件)

#3です。



>エラーが出ます。どこが悪いか教えてもらえますか?
何のコンテナで実行されているのかわかりませんが、ログは確認してみましたか?
見たところコンパイルエラーになるはずなので実行もされてないはずです。コンパイルエラーの箇所などはログにはき出されているはずなので確認してください。

以下、私の気づいた点です。
・num4はintなのにint配列として扱われている。
・入力に対しても、正解に対しても頭が0の時が考慮されていない。(intまたはIntegerで数値を扱っている)
    • good
    • 0

とりあえずぱっと見だと、


セッションから値を取り出してるけど、
セッションに値を格納していない。
ってところかな。

セッションに格納するのか、リクエストに格納するのか、格納したときの名前と同じ名前で取り出さないといけない。

ここら辺かな。
個人的には{とか}が同じ行で見づらいとか、だから余計な{}の組があるんだなぁとか思いますが。(コンパイルエラーは出ないので別に問題ないっちゃぁ問題ない。)

あと、ちょっと下にある
「再:助けてください」
と同じようなソース(やりたいことは違うみたいだけど)で、同じようなとこでひっかかってるみたいだから、参考にしてみてもいいんじゃないかな。

あとは「エラーがでます。」って言うのなら、そのエラーも書かないと。
    • good
    • 0

もしかして、hit/blowの履歴を表示できないってことではないですか?


だとしたら、
1.input type=hidden でユーザ入力送信時に過去の
履歴も毎回送信するようにする。
(カンマ区切りとかで。)
2.過去の履歴をセッション変数にする
のどちらかがよいかと思います。
的外れだったら申し訳ありません。。。
    • good
    • 0

#1です。



hitとblowの判定は難しくないので、一応サンプルを・・・

numbersが当てるの数字でinputが入力された数字だとします。両方int型の配列を想定しています。

// hitを求める
int hit = 0;
for(int i = 0; i < 3; i++){
if(numbers[i] == input[i]){
hit++;
}
}

// blowを求める
int blow = 0;
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
if(i != j && numbers[i] == input[j]){
blow++;
}
}
}

この回答への補足

書き込みありがとうございます。上を元に作ってみたのですが、エラーが出ます。どこが悪いか教えてもらえますか?

<%@ page contentType="text/html;charset=Shift_JIS" %>
<%
int num1,num2,num3,num4; //num4が正解の数字
boolean isRight;//解答が正解かどうか
Integer num4Int=(Integer)session.getAttribute("num4");//
Boolean isRightBoo=(Boolean)session.getAttribute("isRight");//
if(num4Int==null || isRightBoo==null){
//sessionオブジェクトに正解の情報がない
isRight=true;
}else{
//sessionオブジェクトより取得した値を使う
isRight=isRightBoo.booleanValue();
}
if(isRight){
//既に正解済、新たな正解の数字を乱数で決める
do{num1=(int)(Math.random()*10);}
while(num1==0);

do{num2=(int)(Math.random()*10);}
while(num2==num1);

do{num3=(int)(Math.random()*10);}
while(num3==num1 || num3==num2);
num4=num1*100+num2*10+num3;

isRight=false;
session.setAttribute("num4",new Integer(num4));
session.setAttribute("isRight",new Boolean(isRight));
}else{
//sessionオブジェクトより取得した正解を使う
num4=num4Int.intValue();
}
%>
<html>
<head>
<title>hit&blow</title>
</head>
<body>
<h1>数字当てゲーム</h1>
<br>
<%
int ans;
//requestオブジェクトからパラメータを(解答)を受け取る
String s=request.getParameter("answer");
if(s!=null){
try{
ans=Integer.parseInt(s);
if(num4==ans){
//解答と正解が一致
isRight=true;
HttpSession hs = request.getSession(true);
out.println("<p>正解!</p>");
}int hit = 0;
for(int i = 0; i < 3; i++){
if(num4[i] == ans[i]){
hit++;}}

// blowを求める
int blow = 0;
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
if(i != j && num4[i] == ans[j]){
blow++;
}}} {
//解答が3桁以上のの数字
out.println("<p>3桁の数字を入力してください</p>");
}
}catch(NumberFormatException e){
//数字以外をフォームから受け取ったときの例外処理
out.println("<p>数字は整数で入力してください</p>");
}
}
%>
<hr>
<%
String NextPage="Training7.jsp";
NextPage=response.encodeURL(NextPage);
if(!isRight){
// 解答と正解が不一致
%>
3桁の数字を当ててください。<br>
(3桁の中に同じ数字はありません。)<br>
数字を入力してください。<br>
<form action="<%=NextPage%>">
<input type="text"name="answer">
<input type="submit">
</form>
<%
}else{
//解答と正解が一致
%>
<a href="<%=NextPage%>">もう一度する</a>
<%
}
%>
</body>
</html>

補足日時:2005/05/02 10:20
    • good
    • 0

JSPで判定はできるけど表示ができないんですよね?


<% if(○○ == ○○) {%>
正解
<%} else { %>
不正解
<%}%>
じゃダメなのかな?

または
<% if(○○ == ○○) {
out.println("正解");
} else {
out.println("不正解");
%>
とか…

ごめんなさい、できればもう少し詳しく教えて頂ければ…
それと質問内容では判定できると言ってますがNo.1の補足では
判定ができないと言ってますね、どっちですか?
    • good
    • 0

>hitとblowの表示ができず苦しんでます。


これだけでは何が出来ないのかさっぱりわかりません。
もう少し具体的に書いた方が回答は得られやすいです。

1.作っているのはアプレット?JSP/Servlet?それともコンソールアプリですか?
2.表示が出来ないのか、hitとblowの判定が出来ないのかどちらでしょう?

この回答への補足

すみません。書き込んだ後に気付きました。
1.JSPで、2.判定が出来ません。
よろしくお願いします。

補足日時:2005/04/30 19:37
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A