• 締切済み

hit&blow

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

noname#161341
noname#161341
  • Java
  • 回答数6
  • ありがとう数5

みんなの回答

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.6

#3です。 >エラーが出ます。どこが悪いか教えてもらえますか? 何のコンテナで実行されているのかわかりませんが、ログは確認してみましたか? 見たところコンパイルエラーになるはずなので実行もされてないはずです。コンパイルエラーの箇所などはログにはき出されているはずなので確認してください。 以下、私の気づいた点です。 ・num4はintなのにint配列として扱われている。 ・入力に対しても、正解に対しても頭が0の時が考慮されていない。(intまたはIntegerで数値を扱っている)

回答No.5

とりあえずぱっと見だと、 セッションから値を取り出してるけど、 セッションに値を格納していない。 ってところかな。 セッションに格納するのか、リクエストに格納するのか、格納したときの名前と同じ名前で取り出さないといけない。 ここら辺かな。 個人的には{とか}が同じ行で見づらいとか、だから余計な{}の組があるんだなぁとか思いますが。(コンパイルエラーは出ないので別に問題ないっちゃぁ問題ない。) あと、ちょっと下にある 「再:助けてください」 と同じようなソース(やりたいことは違うみたいだけど)で、同じようなとこでひっかかってるみたいだから、参考にしてみてもいいんじゃないかな。 あとは「エラーがでます。」って言うのなら、そのエラーも書かないと。

  • T0ngT0ng
  • ベストアンサー率40% (8/20)
回答No.4

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

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.3

#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++; } } }

noname#161341
質問者

補足

書き込みありがとうございます。上を元に作ってみたのですが、エラーが出ます。どこが悪いか教えてもらえますか? <%@ 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>

回答No.2

JSPで判定はできるけど表示ができないんですよね? <% if(○○ == ○○) {%> 正解 <%} else { %> 不正解 <%}%> じゃダメなのかな? または <% if(○○ == ○○) { out.println("正解"); } else { out.println("不正解"); %> とか… ごめんなさい、できればもう少し詳しく教えて頂ければ… それと質問内容では判定できると言ってますがNo.1の補足では 判定ができないと言ってますね、どっちですか?

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

>hitとblowの表示ができず苦しんでます。 これだけでは何が出来ないのかさっぱりわかりません。 もう少し具体的に書いた方が回答は得られやすいです。 1.作っているのはアプレット?JSP/Servlet?それともコンソールアプリですか? 2.表示が出来ないのか、hitとblowの判定が出来ないのかどちらでしょう?

noname#161341
質問者

補足

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

関連するQ&A

  • iPhoneアプリ開発「Hit&Blow」

    iPhoneアプリでHit&Blow作成 毎度こちらでお世話になっています。 早速ですが質問させてください。 只今iPhoneアプリで「Hit&Blow」という数字ゲームを 開発しようと思っているのですが、 様々な方がC言語の課題として作成されてるみたいで、 ネット上にも色々ソースは上がっているのですが、ここで Object-CとCの違いに戸惑っています。 参考にさせて頂いているソース↓ http://blogs.yahoo.co.jp/takfkjp/2252735.html 2点悩んでいる箇所があり、 ・メソッド内の冒頭にあるint a[10]やint i,jなどは変数宣言だからインターフェイスファイル(~.h)に書くものなのか ・printfで処理される文字表示をポップアップで「只今ヒット○、ブロウ○」としたい場合にどう処理すれば良いか というものです。 ご教授頂けると幸いです。 よろしくお願い致します。

  • javaプログラミングについて

    ただいまjavaプログラム勉強中でhit&blowを制作しております。 public static void main(String[] args) { Scanner scan = new Scanner(System.in); Random rand = new Random(); int[] answer = new int[4]; int[] input = new int[4]; int[] Number = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, }; int x = 10; for (int i = 0; i < 4; i++) { int select = (int) (Math.random() * x); answer[i] = Number[select]; Number[select] = Number[x - 1]; x--; } int count = 1; while (true) { System.out.println("4桁の異なる数値を入力"); int str_input = scan.nextInt(); // 代入 for (int i = 0; i < 4; i++) { input[i] = str_input; } // hit int hit = 0; for (int i = 0; i < 4; i++) { if (input[i] == answer[i]) { hit++; } } // blow int blow = 0; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++){ if (i != j && input[i] == answer[j]) { blow++; } } } if (hit == 4) { System.out.println("4hit"); System.out.println("正解まで " + count + "回"); break; } else { System.out.println("Hit:" + hit + " Blow:" + (blow - hit)); count++; } } } } 数字が4桁で作っているのですが、数字や4桁以上を入力してしまった場合の表示は後にしようとして、先にhitとblowの判定を作ろうとしているのですが、上記で実行したところhitとblowの判定がされずhit:0blow:0と表示されてしまいます。解決策を教えてください。 自分で作ってみたものの、hit blowの判定方法があっているかも自信がないです。

    • ベストアンサー
    • Java
  • hit&bolwのプログラミングができません

    皆様、はじめまして 期末の課題でhit&blowが出たのですがテキストやネット検索しても参考になるのが出てこなかったので聞くことにしました #include "stdafx.h" #include <stdlib.h> #include <time.h> #include <conio.h> int main(int argc, char* argv[]) { int x1, x2, x3, x4; int a1, a2, a3, a4; int hit, blow, loop; int a = 1; printf("hit&blow\nゲーム四つの数をスペース入れて記述しろ\n"); srand(time(0)); do{ x1 = rand() % 10; x2 = rand() % 10; x3 = rand() % 10; x4 = rand() % 10; printf("%d %d %d %d\n",x1, x2, x3, x4); }while(x1 == x2 || x1 == x3 || x1 == x4 || x2 == x3 || x2 == x4 || x3 == x4); loop = 1; while(1 == loop){ scanf("%d", &a1); scanf("%d", &a2); scanf("%d", &a3); scanf("%d", &a4); fflush(stdin); hit = 0; blow = 0; if(x1 == a1){ hit = hit + 1; } if(x2 == a2){ hit = hit + 1; } if(x3 == a3){ hit = hit + 1; } if(x4 == a4){ hit = hit + 1; } if(x1 == a2 || x1 == a3 || x1 == a4){ blow = blow + 1; } if(x2 == a3 || x2 == a4 || x2 == a1){ blow = blow + 1; } if(x3 == a2 || x3 == a1 || x3 == a4){ blow = blow + 1; } if(x4 == a2 || x4 == a3 || x4 == a2){ blow = blow + 1; } printf(" %d hit %d blow\n", hit, blow); if(4 == hit){ loop = 0; } } return 0; } ここまでできたのですが 次の項目ができません (1)正解したときは新しいゲームを続けることができる (2)正解までの最小回数、最大回数を表示する (3)正解したら「○○回で正解しました」と表示する (4)0 0 0 0などの不正入力をできなくする 早急に教えてもらえると助かります

  • C言語のプログラミングについてです><

    今C言語のプログラミングの勉強をしているのですが、わからないプログラムがでてきたので教えてくださる方がいらっしゃれば、ご教授願いたいです。 数当てゲームの作成 1~9(0は除く)のなかから4つの異なる数字をランダムで選択し、4桁の数をつくる。ユーザは4つの数字の並びを入力して、作られた数を当てる。 ユーザの入力した数と作られた数を比較して、同じ数字が同じ桁にある場合は"Hit"というヒントを与える。また、同じ数字が異なる桁にある場合は"Blow"というヒントを与える。すなわち、作られた数が5849で、ユーザが4829という数値を入力した場合、"2 Hit 1 Blow"というヒントが表示されるようにする。 ユーザは10回まで、入力するチャンスが与えられる。 といった感じのプログラミングなんですが、C言語初心者である自分にはまったくわかりません; ; どなたかわかる方がいらっしゃれば、助けていただけないでしょうか?よろしくお願いします!

  • プログラミングについて

    4個の異なる一桁の数字からなる順列を乱数で生成し、 ターミナルで4個の数字の順列を入力すると、 生成した順列と入力した順列を比較し、 数とその位置があっている場合は「ヒット」 数は合っているがその位置が違う場合は「ブロー」とし、 そのヒット数とブロー数を表示するプログラムを教えてください。 実行するとこんな感じになると思います、 (生成した順列3569) Number?:0123 Hits:0,Blows:1 Number?:0124 Hits:0,Blows:0 Number?:3567 Hits:3,Blows:0 Number?:3569 Hits:4,Blows:0 Trials:4

  • VBAの判定の仕方を教えてください。

    EXCEL2000のVBAでの判定の仕方を教えてください。 あるセルに答えを入力します。答えが合っていれば”正解”、合っていなければ”間違っています”というようにしたいのです。 例えばC1のセルに「abc」を入力したらD1のセルに ”正解”と表示し、「abc」以外の入力の時には”間違っています”と表示させます。 答えは英文字の他に数字「123」・文字「マクロ」等を考えています。不正解についても幾通りか表示させたいのですがやり方が解りません。 「例えば半角で入力してください」と表示する。 参考になる事、解るとこだけでもかまわないです。 宜しくお願いします。

  • 入力された数字から条件に合う数字を抽出する方法

    どなたかご存じでしたらご回答をよろしくお願いします。 【質問】  (1)に1~43迄の数字のうち、好きな数字を7つ入力する(重複無し)と、  (2)に入力数字の±1の数字が表示され、(3)に入力数字と下1桁が同じ数字が表示される  様にするにはどうやればよいですか?   (1)入力数字  08 24 28 30 38 41 32 (2)入力数字の±1の数字。  07 09 23 25 27 29 31 33 37 39 40 42 (3)入力数字と下1桁が同じ数字。  01 02 04 10 11 12 14 18 20 21 22 34 ■選択数字範囲:1~43 【注意事項】  ・使用するエクセルは2010です。 ・選択数字範囲は1~100迄自由に変更可能とする。 以上、よろしくお願いします。  

  • ビンゴカードの数字をPCにスキャンしたい・・

    リーチの掛かったビンゴカードをスピーディーに照合したいのです。織り込んだカードを裏返してその数字を読み込み、PCに入力してあるヒット数字と照合する仕組みです。既にEXCELで照合する仕組みを作っています。(仕組みは末尾に表記) 頂きたいアイデアは、(1)数字を読み込む方法。(2)PCに貼り付ける方法です(後述の「表2」に)。 「EXCELの照合仕組み」  「表1」にヒット数字を入力する。 「表2」はリーチカードを(今は)手動入力する。  「表2」の中の数字で「表1」に無い数字のセルのパターンがの色が変わる。  以上の仕組みです。

  • EXCEL VBA ポップアップを表示する方法

    ご質問させていただきます。 Sheet1のA2~A1701まで4桁の数字(各行で重複しない4桁の数字です)、 Sheet1のB2~B1701とSheet1のC2~C1701にはDDEで取り込んだリアルタイムデータ、 Sheet1のD2~D1701には、B2~B1701とC2~C1701のリアルタイムデータを使ってIF関数で条件判定をしてYESまたはNOを表示する関数式が入力されています。 やりたいことは、D列の条件判定でYESが表示された場合、YESが表示された行のA列の4桁の数字をポップアップで表示させることです。 このようなことはできるのでしょうか? メッセージボックスを使えば良いのかもしれませんが、当方VBA初心者のためメッセージボックスの使い方がよく分かりません。 どなたか教えていただけないでしょうか? よろしくお願いいたします。

  • LEFT関数のようなもの(7桁の数字から左の3桁の数字を抜き出す)

    はじめての質問です、よろしくお願いします。 ホームページでのアクセス制限を行うフリーcgiを修正・改造して、目的にかなうように作り替えたいのです。 このアクセス制限で行いたいのは  ・パスワードに7桁の数字を入力(例:1234567)  ・左の3桁(123)だけをパスワードリストに照合。 この「7桁の数字から左の3桁の数字を抜き出す」という部分にお手上げの状態です。 LEFT関数の様なもの、または、そのような処理をする方法について、アドバイスやヒントをお願い致します。 また、入力されたパスワードが7桁かどうかのチェック方法についてもよろしければアドバイス下さい。

    • ベストアンサー
    • Perl