• 締切済み

javaの数字当てゲーム

javaで数字当てゲーム作りたいです。 ここまで出来ています。 しかし、もう一度やりますか?というオプションで、yと入力すればもう一回、 nと入力すれば終わるようにしたいです。 それから、最後に何回ゲームを遊んだか、トータルで数字を何回予想したか、という情報も出力したいです。 できれば、正解するまでに平均で何回かかったかと、一番少なかった数も出力したいです。 よろしくお願いします import java.util.*; public class NumberGuess { public static void main(String args[]) { boolean b = true; int computer = (int) (Math.random() * 100) + 1; int player = 0; int count = 0; System.out.println("1~100の数当てゲーム"); if (computer < 0) { computer *= -1;} while (b) { count++; Scanner keyboard = new Scanner(System.in); System.out.print("1~100の数字を入力してください "); player = keyboard.nextInt(); if (computer > player) { System.out.println("CPUが作成した数字はもっと大きいです"); } else if (computer < player) { System.out.println("CPUが作成した数字はもっと小さいです"); } else if (computer == player) { System.out.println( count + "回目で当てました"); } } } } 直すべきところもあれば教えてください。

  • Java
  • 回答数2
  • ありがとう数0

みんなの回答

回答No.2

例えば、こんな感じでしょうか。 http://pastebin.com/MsJqcw1i

  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.1

変数 computer は必ず 0 以上なので、正負逆転は不要 参考) http://docs.oracle.com/javase/jp/7/api/java/lang/Math.html#random() 繰り返し処理 while(b){} の終了条件がない おそらく「当てました」あたりで処理追加が必要 ランダム数を決めるから、当てましたまでの処理を、 一つのメソッドとして分離すべき 例) /* @return 正解するまでの回数 */ protected int playGameOnce() メソッド main にて、ゲームの制御を行う 1. 統計情報の変数を初期化 2. 上記のメソッドを呼ぶ 3. 正解するまでの回数を取得して、統計情報を更新する 4. 続行の質問をして、"y" なら 2 に戻る 5. 統計情報を表示しておしまい

関連するQ&A

  • javaファイルの質問!

    public class kazuate{ public static void main(String args[]){ int computer = (int)(Math.random()*100)+1; int player = 0; int count = 0; System.out.println("数当てゲーム(範囲は0~99)"); System.out.println("何回で当てられるかな?"); while(true){ count++; System.out.print("数字を入力してください"); player = Integer.parseInt(args[0]); if(computer > player){ System.out.println("小さいです。"); }else if(computer < player){ System.out.println("大きいです。"); }else if(computer == player){ System.out.println(count +"回目で当りです。"); break; } } } } コンパインしたら break文を使っているのに繰り返しがとまらず永遠に回答が流れてしまいます。なぜでしょうか?

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

    ただいまjavaプログラミングの勉強をしております。 そこで数字を複数回入力させ、-1を入力すると終了し、その数字の最大、最小、平均を出力するプログラムを作っているのですが、 public static void main(String[] args) { int max = 0; int min = 100; int sum = 0; int count = 0; Scanner sc = new Scanner(System.in); System.out.println("正の整数を入力してください"); int n = sc.nextInt(); while (num01 != -1){ System.out.println("正の整数を入力してください"); sum += n; n = sc.nextInt(); count++; if(max < n) max = n; if(min > n) min = n; } System.out.println("入力された整数の最大は" + max); System.out.println("入力された整数の最小は" + min); System.out.println("入力された整数の平均は" + sum/count); } } このようなプログラミングが作れたのですが、たとえば30と10を入力したときに 最大10 最小-1 平均20 と表示されてしまいます。色々試行錯誤してみたのですが、改善されなかったため質問させて頂きました。原因と解決方法を教えて頂きたいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • プログラミング(Java)について

    学校の課題で考えても、分からなかったので質問させてください。 下のプログラムを以下のように変更したいのです。 (1)正解の数から±20以下まで接近した時は「小さすぎます、でもあと少しです!!」または「大きすぎます、でもあと少しです!!」というメッセージを表示する。 (2)正解が出るまでに何回数字を入力したか数えて、正解が出た後で「正解が出るまで○○回かかりました」というメッセージを表示する。 (3)さらにその回数が5回以下だったら「すばらしい!」、その回数が10回以上だったら「間が鈍いですね」、5回と10回の間だったら「普通です」というメッセージを表示する。 import java.util.Scanner; public class kazuate{ public static void main(String args[]){ Scanner kbd = new Scanner(System.in); int x; boolean flag = true; int seikai = (int)(Math.random() * 1000); System.out.println("数当てゲームを始めます"); System.out.println("0~999の数字を入力してください"); while(flag){ x = kbd.nextInt(); if (x >= 0 && x < seikai){ System.out.println("小さすぎます、もう1回!"); }else if(x > seikai && x <= 999){ System.out.println("大きすぎます、もう1回!"); }else if(x == seikai){ System.out.println("正解です!"); flag = false; }else{ System.out.println("入力するのは0~999です。やり直してください"); } } } よろしくお願いします。

  • java enum

    エラー内容 int cannot be dereferenced 何が原因でエラーになっているのですか? import java.util.*; enum light{ red,yellow,blue } class m1{ public static void main(String[] args){ int light; Scanner ss = new Scanner(System.in); System.out.println("整数値を入力 : "); int i = ss.nextInt(); if(i == light.red.ordinal()){ System.out.println("信号は赤色です"); } else if(i == light.yellow.ordinal()){ System.out.println("信号は黄色です"); } else if(i == light.blue.ordinal()){ System.out.println("信号は青色です"); } } }

  • 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
  • javaの超初心者です。ご教授いただけたら幸いです。

    javaの超初心者です。ご教授いただけたら幸いです。 ある書籍を元にやっているのですが、演習に答えがなく、わからないためその問題をお願い致します。 2桁の整数値(10~99)を当てさせる数当てゲームを作成せよ。という問題です。 下記は少しやってみました。 import java.util.Random; import java.util.Scanner; class Kazuate99 { public static void main(String[] args) { Random rand = new Random(); Scanner stdIn = new Scanner(System.in);    int no = rand.nextInt(); ← ここがたぶん違う System.out.println("数当てゲーム開始!!"); System.out.println("10~99の数を当てて下さい。"); int x; // プレーヤが入力した数 do { System.out.print("いくつかな : "); x = stdIn.nextInt(); if (x > no) System.out.println("もっと小さな数だよ。"); else if (x < no) System.out.println("もっと大きな数だよ。"); } while (x != no ); System.out.println("正解です。"); } } 宜しくお願い致します。

    • ベストアンサー
    • Java
  • 【JAVA】数字をひし形に出力するプログラムについ

    JAVAについて質問です。 import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int count = 1, space = 0; for (int i = 1; i < 2 * n; i++) { if (i <= n) { space++; } else { space--; } for (int spc = n - space; spc > 0; spc--) { System.out.print(" "); } for (int j = 0; j < count; j++) { System.out.print(i); } if (i < n) { count = count + 2; } else { count = count - 2; } System.out.println(); } in.close(); } } ↑のプログラムで標準入力に例えば8と入力すると、 _______1↵ ______222↵ _____33333↵ ____4444444↵ ___555555555↵ __66666666666↵ _7777777777777↵ 888888888888888↵ _9999999999999↵ __1010101010101010101010↵ ___111111111111111111↵ ____12121212121212↵ _____1313131313↵ ______141414↵ _______ 15↵ という風なひし形が出力されます。 「_」は実際には出力されません。 これを _______1↵ ______222↵ _____33333↵ ____4444444↵ ___555555555↵ __66666666666↵ _7777777777777↵ 888888888888888↵ _9999999999999↵ __00000000000↵ ___111111111↵ ____2222222↵ _____33333↵ ______444↵ _______5↵ という風にしたいです。 (上から10段目以降は1の位が出力されるようにしたいのです) それにはこのプログラムをどう修正すればよいでしょうか?

    • ベストアンサー
    • Java
  • Javaでゲームを作ったのですが・・・

    Java(Turtle)で以下のようなスクリプトで、おみくじというゲームを作りました。 フローチャートも書かなければいけないのですが、書き方がわかりません。 わかる方、教えてください。お願いします。 public class Final extends Turtle { //起動処理 public static void main(String[] args) { Turtle.startTurtle(new Final()); } //タートルを動かす処理 public void start(){ System.out.println("おみくじを開始します。"); System.out.println("十字キーで箱をふり、fキーでおみくじを引いてください。"); Box a=new Box();//おみくじの箱を作ります。 int c=0; int d=0; int e=0; int f=0; int g=0; int v=0; for (v=0;v<1;) { //fキーを押して、vが1になるまで箱をふれるようにします。 sleep(0.5); hide(); int in = key(); //int inをキーボード入力に対応させるようにします。 if (in==38){ a.warp(110,100); c=1;d=0;e=0;f=0; Last z=new Last(); //おみくじをふる効果音を作成します。キーを押した時に効果音が出るようになります。以下のLast zも同様です。 z.warp(200,200); update(); } else if(in==39){ a.warp(90,100); d=1;c=0;e=0;f=0; Last z=new Last(); z.warp(50,50); update(); } else if(in==40){ a.warp(100,110); e=1;c=0;d=0;f=0; Last z=new Last(); z.warp(50,200); update(); } else if(in==37){ a.warp(100,90); f=1;c=0;d=0;e=0; Last z=new Last(); z.warp(200,50); update(); } else if(in==70){ a.lt(30); v=1; } update( ); } Omikuji b=new Omikuji (); //箱から出てくるおみくじを作成します。 if(c==1){ b.warp(62,120); } else if(d==1){ b.warp(42,120); } else if(e==1){ b.warp(52,130); } else if(f==1){ b.warp(52,110); } else{ b.warp(52,120); } update(); sleep(0.5); g=random(50)%3; if(g==0){ //ランダムで、おみくじの結果を作成します。 System.out.println("大凶です"); } else if(g==1){ System.out.println("大吉です"); } else if(g==2){ System.out.println("中吉です"); } else if(g==3){ System.out.println("凶です"); } update(); } }

  • 至急!java オブジェクト指向

    昨日、質問させていただいた者です。おかげさまで、試合の状況を出力するプログラムが完成しました。あとはこれをオブジェクト指向のプログラムにしたいので、BSO()、Runner()、Score()のメソッド等を別々のクラスに記述して動作させるようにしたのですが、エラーばかりで起動できませんでした。インターフェースや継承などを使っていただいて構わないので、できれば改良のほうをお願いします。 import java.io.*; public class test1 { public static void main(String[] args) throws IOException{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); int sc=0,bc=0,oc=0,rc1=0,rc2=0,rc3=0,tenA=0,tenB=0,i=0; BSO(sc, bc, oc); Runner(rc1,rc2,rc3); Score(tenA,tenB,i); while(true){ i++; while(true){ System.out.println("ピッチャー、投げた!"); String str=br.readLine(); char hantei=str.charAt(0); if(hantei=='s'){ System.out.println("ストライク!"); sc++; }else if(hantei=='b'){ System.out.println("ボール!"); bc++; }else if(hantei=='o'){ System.out.println("アウト!"); oc++; bc=sc=0; }else if(hantei=='h'){ System.out.println("ヒット!"); bc=sc=0; }else if(hantei=='x'){ System.out.println("ホームラン!"); bc=sc=0; }else{ System.out.println("入力が違います。"); continue; } if(sc==3){ System.out.println("ストライク!バッターアウト!"); oc++; sc = bc =0; }else if(bc==4){ System.out.println("フォアボール!"); sc = bc =0; } if(oc >= 3){ System.out.println("スリーアウト!"); break; } System.out.println("走者は出たか、又は進塁したか?"); String str6=br.readLine(); char kakuninn=str6.charAt(0); if(kakuninn=='y'){ System.out.println("一塁は"); String str2=br.readLine(); char r1=str2.charAt(0); if(r1=='y'){ rc1=1; }else if(r1=='n'){ rc1=0; }else{ System.out.println("入力が違います。"); continue; } System.out.println("二塁は"); String str3=br.readLine(); char r2=str3.charAt(0); if(r2=='y'){ rc2=1; }else if(r2=='n'){ rc2=0; }else{ System.out.println("入力が違います。"); continue; } System.out.println("三塁は"); String str4=br.readLine(); char r3=str4.charAt(0); if(r3=='y'){ rc3=1; }else if(r3=='n'){ rc3=0; }else{ System.out.println("入力が違います。"); continue; } }else{ } System.out.print("得点は? :"); String str7=br.readLine(); int tokuten=Integer.parseInt(str7); if(i%2==1){ tenA=tenA+tokuten; }else{ tenB=tenB+tokuten; } BSO(sc, bc, oc); Runner(rc1,rc2,rc3); Score(tenA,tenB,i); } oc=0; rc1=rc2=rc3=0; BSO(sc, bc, oc); Runner(rc1,rc2,rc3); Score(tenA,tenB,i); if(i==6){ System.out.println("ゲームセット!"); break; }else{ } } Score(tenA,tenB,i); } public static void BSO(int sc, int bc, int oc){ System.out.println("---- BSOカウント ----"); System.out.print("B "); for(int i=1;i<=bc;i++){ System.out.print("〇"); } System.out.println(""); System.out.print("S "); for(int i=1;i<=sc;i++){ System.out.print("〇"); } System.out.println(""); System.out.print("O "); for(int i=1;i<=oc;i++){ System.out.print("〇"); } System.out.println("\n------------------"); } public static void Runner(int rc1,int rc2,int rc3){ System.out.println("***走者の有無***"); if(rc2==1){ System.out.println(" ▲ "); }else if(rc2==0){ System.out.println("  △ "); } if(rc3==1){ System.out.print("▲  "); }else if(rc3==0){ System.out.print("△  "); } if(rc1==1){ System.out.println("▲"); }else if(rc1==0){ System.out.println("△"); } System.out.println("***************"); } public static void Score(int tenA,int tenB,int i){ if(i==0||i==1||i==2){ System.out.print("1回"); }else if(i==3||i==4){ System.out.print("2回"); }else if(i==5||i==6){ System.out.print("3回"); } if(i==0||i%2==1){ System.out.println("表"); }else{ System.out.println("裏"); } System.out.println(tenA+" "+"-"+" "+tenB); } }

    • ベストアンサー
    • Java
  • javaで入力した数字の順番を記憶させたい

    javaで、バブルソートにより、入力した数字を小さい順に並べるプログラムを作りたいです。次のようなものです。 数をいくつ入力しますか? 5 1番目の数:4 2番目の数:3 3番目の数:2 4番目の数:1 5番目の数:5 1番目の数: 1 (元4番目の数) 2番目の数: 2 (元3番目の数) 3番目の数: 3 (元2番目の数) 4番目の数: 4 (元1番目の数) 5番目の数: 5 (元5番目の数) その際に、もともとそれが何番目に入力された数だったかということも表示させたいのですが、その方法が分かりません。 元の数字の順番を記憶させればいいのだと思うのですが、どのようにプログラムを組めばいいのでしょうか?教えてくださると嬉しいです。 ちなみに数字を小さい順に並べるプログラムは次のようになりました。 import java.util.Scanner; public class Test { public static void main(String args[]){ int item[]=new int [100]; int a, b, t; int count; Scanner sc = new Scanner(System.in); System.out.print("数をいくつ入力しますか?"); count=sc.nextInt(); for(a=0;a<count;a++){ System.out.print(a+1+"番目の数:"); item[a]=sc.nextInt(); } System.out.println(); for(a=1;a<count;++a) for(b=count-1;b>=a;--b){ if(item[b-1]>item[b]){ t=item[b-1]; item[b-1]=item[b]; item[b]=t; } } for(t=0;t<count;t++) System.out.println(t+1+"番目の数:"+item[t]); } }

    • ベストアンサー
    • Java

専門家に質問してみよう