• 締切済み

メソッドを使ったプログラム

メソッドをつかったプログラムで数当てゲームを作成したいのですが 1から1000までのランダムな値(以降 数値X として)を取得し、プレイヤーにその数を当てさせる。 プレイヤーが入力した数値(以降 数値Y として)が数値Xより大きければ『もっと小さいです』、数値Yが数値Xより小さければ『もっと大きいです』と出力する。 数値Xと数値Yが同じになるまで繰り返し、何回であったたかを最後に表示する。 条件:以下の処理の単位をメソッドにする。   1.1から1000までのランダムな値を取得する。   2.数値X、数値Yの関係(大小、等しい)を調べ、適切なメッセージを出力する というプログラミングを作成したいのですがどういうふうにしたらよいのかわかりません!! import java.io.*; class Question7_2{ public static void main(String[] args){ BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("数当てゲーム"); というところでとまった状態です。どのようにしたらよいか教えてください!例外発生やIf文を使うというのまではわかるのですが…

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

みんなの回答

  • tachiwa
  • ベストアンサー率34% (25/73)
回答No.2

ANo1さんの回答は高度なので私には理解できませんでした。 初心者向けに書いた以下のコードはいかがですか。 尚、テストに時間がかかるので10以下の数当てにしました。 import java.io.*; class Question7_2{ static int count = 0; public static void main(String[] args){ System.out.println("数当てゲーム"); System.out.println("10以下の整数を入れてください"); System.out.println("終了は99を入れてください"); while(!hantei()){ hantei(); } } public static int intRandom(){ double doubleValue = Math.random(); System.out.println("発生したのはdouble" + doubleValue); int intValue =(int)(doubleValue*10); System.out.println("intに変換したのはint" + intValue); return intValue; } public static boolean hantei(){ boolean flag=false; try{ BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); int x = Integer.parseInt(r.readLine()); System.out.println("入力したのはint" + x); if(x == 99){ System.exit(1); } int y = intRandom(); if(x == y){ flag=true; System.out.println("当たりまでの回数" + count); }else{ flag = false; count++; System.out.println("挑戦回数" + count); } } catch(IOException e){ System.out.println("エラーは" + e); } return flag; } }

kojiin
質問者

お礼

ありがとうございます! tachiwaさんのサンプルを参考に自分なりにつくってみました!! import java.io.*; class Question6_2{ public static void main(String[] args){ BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("数当てゲーム"); int x=0,y; int hit=0; boolean flag=true; x = rand(); while(flag){ System.out.println("1から1000の値を入力してください。"); String s = r.readLine(); y = Integer.parseInt(s); flag = hikaku(x,y); hit++; } System.out.println("手数"+hit+"回"); }catch (IOException e){ System.out.println("例外発生" + e); }catch(NumberFormatException e){ System.out.println("整数以外が入力されました。"); } } public static int rand(){ int x; x = (int)(Math.random() * 1000 ) +1; return x; } public static boolean hikaku(int x,int y){ if(y > x ){ System.out.println("もっと小さいですよ "); }else if(y < x){ System.out.println("もっと大きいですよ"); }else { System.out.println("正解です"); return false; } return true; } }

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

import java.io.*; import java.util.*; public class HitInt { private static int makePositiveIntNumber(int max){ return new Random().nextInt(max)+1; } private static boolean judge(int a, int b){ if(a > b){ System.out.println("もっと大きいです"); } if(a < b){ System.out.println("もっと小さいです"); } return a == b; } public static void main(String argv[]){ int count = 0; int X = makePositiveIntNumber(1000); int Y = 0; boolean decision = false; Scanner keyboard = new Scanner(System.in); System.out.println("1~1000の数値を考えました。"); System.out.println("その数を当てて下さい。"); do{ System.out.print("数値を入力>"); try{ Y = keyboard.nextInt(); decision = judge(X, Y); count++; } catch(InputMismatchException e){ System.out.println("入力誤り!"); } }while(decision == false); System.out.printf("%d回で正解しました!", count); } }

kojiin
質問者

お礼

ありがとうございます! BLUEPIXYさんのサンプルを参考に自分なりにつくってみました!! import java.io.*; class Question6_2{ public static void main(String[] args){ BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("数当てゲーム"); int x=0,y; int hit=0; boolean flag=true; x = rand(); while(flag){ System.out.println("1から1000の値を入力してください。"); String s = r.readLine(); y = Integer.parseInt(s); flag = hikaku(x,y); hit++; } System.out.println("手数"+hit+"回"); }catch (IOException e){ System.out.println("例外発生" + e); }catch(NumberFormatException e){ System.out.println("整数以外が入力されました。"); } } public static int rand(){ int x; x = (int)(Math.random() * 1000 ) +1; return x; } public static boolean hikaku(int x,int y){ if(y > x ){ System.out.println("もっと小さいですよ "); }else if(y < x){ System.out.println("もっと大きいですよ"); }else { System.out.println("正解です"); return false; } return true; } }

関連するQ&A

  • メソッド

    public class Point{ public int x; public int y; public void swap(int s){ int x = s * y; y = s * x; this.x = x; } public void swap2(int s){ int x = s * y; y = s * this.x; this.x = x; } public static void main(String[] args){ Point pt = new Point(); pt.x = 3; pt.y = 4; pt.swap(2); System.out.println(pt.x + " " + pt.y); pt.swap2(3); System.out.println(pt.x + " " + pt.y); } } このプログラムでswapメソッドとswap2メソッドってどう違うんですか?

    • ベストアンサー
    • Java
  • このプログラムのどこがいけないかの指摘をお願いします!

    import java.io.*; public class ex32h_1{ public static void main(String args[]) throws Exception{ BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); System.out.print("x="); int x=(new Integer(in.readLine())).intValue(); System.out.print("y="); int y=(new Integer(in.readLine())).intValue(); System.out.print("z="); int z=(new Integer(in.readLine())).intValue(); boolean result= (x*y*z==0) && ((x^2+y^2)!=0) && ((y^2+z^2)!=0) && ((x^2+z^2)!=0); System.out.println("0は一つ?;"+result); } } x,y,zに0が一つだけあるかどうかを調べるというものです。x=0,y=1,z=1(0,1,1)の組み合わせのときはなぜかfalseになってしまいます。他のとき(0,1,2)のときなどはきちんとtrueになります。 どこがいけないかわかるかたご指摘の程をお願いします。 (幅の都合上左よりですが実際のプログラムをきちんとスペースが入っています。)

    • ベストアンサー
    • Java
  • コンパイルはできるのに・・・・

    import java.io.*; public class ex32 { public static void main(String[] args) throws Exception { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int x = (new Integer(in.readLine())).intValue(); int y = (new Integer(in.readLine())).intValue(); while(x != y) { System.out.print("int x> "); System.out.print("int y> "); if(x > y) { x = x - y; } else{ y = y - x; } } System.out.println("GCM = " + x); } } このソースで、コンパイルとdouble x >の出力まではできるのですが、 そこで数字を入力してエンターを押すと、そこから進みません。 どう直したらいいでしょうか。

    • ベストアンサー
    • Java
  • プログラムの組み合わせ方

    java初心者です。 2つのプログラムを組み合わせて1つのプログラムにしたいんですが、イマイチ分かりません。 このプログラムと、 import java.io.*; class Hello2 {  public static void main(String[] args) throws IOException {   System.out.println("名前を入力してください");   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   String str = br.readLine();   System.out.println(str + "さん、こんにちは!");  } } このプログラムを、 import java.io.*; class Sanbai{  public static void main(String[] args) throws IOException {   System.out.println("好きな数を入力してください");   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   String str = br.readLine();   int x;   x = Integer.parseInt(str);   System.out.println("あなたの入力した数:" + x);   System.out.println("その3倍の数:" + (x*3));  } } 組み合わせて1つのプログラムにするにはどうしたらいいですか?(>_<)

    • ベストアンサー
    • Java
  • toString()メソッドについて

    ある本に、 ------------------------------------------------------------------------- System.out. println(car1); 特に何も準備せずに上のコードを記述すると、Objectクラスから継承したtoString()メソッドが呼び出されます。 そしてこのtoString()メソッドの戻り値となっている「Car@数値」という文字列が画面に出力されるようになっているのです。 ------------------------------------------------------------------------- と書いてありましたが、toString()メソッドの戻り値となっている「Car@数値」という文字列が画面に出力とはいったいどういう意味でしょうか?

    • ベストアンサー
    • 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
  • メソッドの作成基準について

    現在、Webアプリを開発しているのですがメソッドを作成するにあたり いつも悩むことが下記2点あります。 どういう基準で判断すればよいのでしょうか。 正解の判断基準ってあるのでしょうか。 1. メソッドをStatic なメソッドにするかインスタンスメソッドにするか。 2. メソッド内の処理に必要な数値を引数で取得するかセッションから取得するか。   2.についてはセッションから値を取得するようにすれば引数の無いメソッドが できて便利かもと思ってはいるのですがこの考えは正しいのでしょうか。

    • ベストアンサー
    • Java
  • グラフィックDrawLineメソッドについて

    グラフィックDrawLineメソッドについて教えてください。 下記のコードでは、開いた線になります。OK mypoints(0)=New Point(10,10) ,mypoints(1)=New Point(40,70) mypoints(2)=New Point(60,30) mypoints(3)=New Point(90,90) Dim g As Graphics = PictureBox3.CreateGraphics() g.DrawLines(New Pen(Color.Blue, 1), mypoints) ところが、下記のコードで、グラフが最後閉じられてしまいます。NG どうしてでしょうか? For i = 0 To 48 mypoints(i) = New Point((i * 0.35), (PdaOneData(N_OneDtNo).PicData(i) * 0.05)) Debug.WriteLine(mypoints(i)) Next Dim g As Graphics = PictureBox3.CreateGraphics() g.DrawLines(New Pen(Color.Blue, 1), mypoints) 上記のmypoints(i) のイミディエイトウィンドウ表示は下記のとおりです。 X=0,Y=40}{X=0,Y=40}{X=1,Y=39}{X=1,Y=39}{X=1,Y=39}{X=2,Y=38}{X=2,Y=38}{X=2,Y=37}{X=3,Y=37}   ・・・中省略・・・ {X=14,Y=43}{X=14,Y=43}{X=15,Y=43}{X=15,Y=43}{X=15,Y=44}{X=16,Y=44}{X=16,Y=43}{X=16,Y=42}

  • 全パッケージの取得、全クラスの取得、全メソッドの取得

    やりたい事は、メインクラスより、同階層の全パッケージを取得(A)、 (A)より同階層の全クラスを取得(B)、 (B)より同階層の全メソッドを取得といったような事です。 例えば public class a { public static void main(String args[]) {  全パッケージの取得  全クラスの取得  全メソッドの取得 } } みたいな感じに。 試行錯誤したのですが、その処理を行う事の出来るメソッドかどうかも良く分からないし、 コンパイルエラーになるばかりで実現が出来ません。  ・メインクラスから同階層のパッケージを取得してパッケージ名を出力。  ・メインクラスからxパッケージ内の同階層のクラスを取得してクラス名を出力。  ・メインクラスからxパッケージにあるyクラス内のメソッドを取得してメソッド名を出力。 上記のようなめちゃくちゃシンプルなコードを挙げてご教示願います。

    • ベストアンサー
    • Java
  • Java do ー while文とユーザ入力変数

    ユーザ入力変数を作成し、その変数が奇数(2で割りきれない数値)の時だけその数値を出力する。 処理のdo - while文(do - while文の中でユーザ入力変数をインクリメントさせる) 終了条件 :ユーザ入力変数が10以上の場合終了する。 出力結果: 0のとき 1のとき 2のとき 3のとき 4のとき 0 0と同じ 3 2と同じ 4 1 5 5 3 7 7 5 9 9 7 9 のように結果を求めたいのですが。 BufferedReader br = new BufferedReader(new InputStreamReader(System.in); int num1 = Integer.parseInt(br.readLine()); do{ num1 = new Random().nextInt(10); num++; if(num1 % 2 == 0){ System.out.println(num1); } }while(num1 >= 10); } } までは書きましたが、実行すると、上記の出力結果になりません。 どうすれば、上記の出力結果になるのか。 教えてください。 お願いします。

専門家に質問してみよう