質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

1706閲覧

java数当てプログラムの条件分岐

bell60316109

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/05/31 06:13

編集2021/05/31 06:52

前提・実現したいこと

私はプログラミング初心者で今は数当てのプログラミングを組んでいるのですが
今は5回以内に数字を当てるプログラミングを組んだのですがそのプログラミングに数字をあてるまでの試行回数に応じて1回ならaと表示 2回ならbと表示 3回ならcと表示されるような回数によって表示が変わるプログラムを追加したいのですがソースがわからないのでどなたか教えていただければ幸いです。

該当のソースコード

java

1import java.awt.BorderLayout; 2import java.awt.EventQueue; 3 4import javax.swing.JFrame; 5import javax.swing.JPanel; 6import javax.swing.border.EmptyBorder; 7import javax.swing.JLabel; 8import javax.swing.JTextField; 9import javax.swing.JButton; 10import java.awt.event.ActionListener; 11import java.awt.event.ActionEvent; 12import java.util.Random; 13import javax.swing.SwingConstants; 14 15public class Pre09 extends JFrame implements ActionListener { 16 17 private JPanel contentPane; 18 private JTextField txf; 19 private JLabel lbl; 20 private JLabel hnt; 21 Random random = new Random(); 22 int ans = random.nextInt(100); 23 int count =0; 24 25 /** 26 * Launch the application. 27 */ 28 public static void main(String[] args) { 29 EventQueue.invokeLater(new Runnable() { 30 public void run() { 31 try { 32 Pre09 frame = new Pre09(); 33 frame.setVisible(true); 34 } catch (Exception e) { 35 e.printStackTrace(); 36 } 37 } 38 }); 39 } 40 41 /** 42 * Create the frame. 43 */ 44 public Pre09() { 45 setTitle("プレ案"); 46 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 47 setBounds(100, 100, 450, 220); 48 contentPane = new JPanel(); 49 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 50 setContentPane(contentPane); 51 contentPane.setLayout(null); 52 53 lbl = new JLabel("0~100の数字を当ててね!"); 54 lbl.setBounds(20, 24, 224, 13); 55 contentPane.add(lbl); 56 57 txf = new JTextField(); 58 txf.setHorizontalAlignment(SwingConstants.RIGHT); 59 txf.addActionListener(this); 60 txf.setBounds(20, 62, 86, 19); 61 contentPane.add(txf); 62 txf.setColumns(10); 63 64 hnt = new JLabel("ヒント"); 65 hnt.setBounds(20, 99, 147, 13); 66 contentPane.add(hnt); 67 68 JLabel gif = new JLabel("gif"); 69 gif.setBounds(304, 65, 45, 13); 70 contentPane.add(gif); 71 } 72 public void actionPerformed(ActionEvent e) { 73 int a =Integer.parseInt(txf.getText()); 74 75 if(e.getSource()==txf) 76 if(ans == a) { 77 lbl.setText("正解!"); 78 }else if(ans<a) { 79 lbl.setText("大きすぎます。"); 80 }else { 81 lbl.setText("小さすぎます"); 82 } 83 count++; 84 if(count==6) { 85 lbl.setText("Game Over! 正解は"+ans+"でした!"); 86 } 87 } 88 }

試したこと

ここからどんな文をどこに書き足したらいいのか分からなくなってしまいました。

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

K_3578

2021/05/31 06:18

ソースコードはMarkDownのcode機能でブロック化してご提示ください。 ```Java(言語名) ソースコード ``` と言う形です
kaina

2021/05/31 06:29

修正されたようですが、K_3578さんが書いたのをそのまま張り付けてはダメです。 ソースコード部分はあなたが質問に書いたJavaプログラムに置き換えて修正してね という意味ですよ。
K_3578

2021/05/31 06:42 編集

なんかぐちゃぐちゃになってますがプレビュー見ながら修正されてますか? 質問編集画面の右側にこちらから見えているのと同じものが見えています。 MarkDownのコードブロックは端的に言うと```で上下を囲むと出来ます。 因みに今は、バッククォートを }``` しているので、 } ``` と言う形にすればコードブロックになるかと。 >kainaさん ありがとうございます。
kaina

2021/05/31 06:42

なんだか酷くなってますね。。。 ソースコードの最後の部分が以下のようになっているのでマークダウン形式になっていません。 }``` 以下のように行を分けて下さい。 修正する際に下のほうにプレビュー表示されますので、そちらを確認した上で修正したほうが良いです。 } ```
bell60316109

2021/05/31 06:49

K_3578さん kainaさん ご指摘ありがとうございます。質問初めてなためお手数おかけします。
dodox86

2021/05/31 06:49

課題であるならばまずご自身で考え、挑戦してみませんか。具体的にどの部分が分からないのでしょう。 1. 試行回数の数え方。試行回数とは? 2. 回数1~3回に応じて'a', 'b', 'c'と表示の仕方。4,5回ならどうするのですか?   どう、どこに表示するのかは質問者さん自身が考えないと。 3. あるいは何をどうしたらよいか全く分からない、とか。
dodox86

2021/05/31 07:05 編集

[2021/05/31 15:52]の質問編集を読んで: 単に確認なのですが、そもそもご提示の、元のコードを理解されていますでしょうか。 もしここまでご自身で理解して書けているのであれば、そう難しいことではないと思えるのです。 理解されるまで、1から10まで手取り足取り教えるのも難しいと思います。
guest

回答2

0

ベストアンサー

何となくかわいそうになってきた(他意はない)ので回答します。
(おそらく、今の時期はコロナ禍だから周りに聞ける人が居ないとかそういう理由で右も左もわからないっていうパターンかなと思ったので)

一応、質問者さんなりに努力はなされているようなので。


まず、プログラミングっていうのは『こう書けばいい』っていうものじゃないです。

そもそもコンピュータが出来たのは、『人間が現実世界でやっていることをさせるため』です。
コンピュータの歴史を見ればわかるはずです。

そして、『プログラムは魔法でもなんでもなく、人間が現実世界でやっていることを逐一指示されながら処理しているだけの代物である』です。

つまり、『現実世界でならどうするか』です。

5回以内に数字を当てるプログラミングを組んだのですがそのプログラミングに数字をあてるまでの試行回数に応じて1回ならaと表示 2回ならbと表示 3回ならcと表示されるような回数によって表示が変わるプログラム

は、言い換えると、

あなたはAさんと『5回以内に数字を当てるゲーム』をします。 そこであなたが親(出題者)となり、その試行回数に応じて、1回なら"a", 2回なら"b", 3回なら"c"... と結果を伝えることにします。

というようなルールがあるゲームをAさんと行う感じです。

もちろん出題者は質問者さんで、Aさんが答える人です。

どのようにしますか?

まず、これをやるには『試行回数』、『試行』がよくわかっていないとできませんね。

なのでまずはこれを調べる。

『試行回数 とは』とかでggる。

検索力も必須です

次に、ゲームのフロー、つまり流れを理解する。

たとえば私なら、

1. 数字を決定する 2. Aさんが当たるまで質問を繰り返す 2.1. 繰り返している間 2.1.1. カウントする(回数を数え上げる) 3. ゲームが終了したら 3.1. 試行回数で……

のようにします。

これをJavaとかの独自の書き方で書き下すだけです。

そして、質問ではGUI (Graphical User Interface) となっています。
それでも内部処理の発想は同じで、表示部なんかがLabelとかを使っているだけです。

後の細かい部分はご自分で考えてみてください。

あ、ちなみにもう一つヒントを。

他人のコードを読む場合は、一行レベルで何をしているかを考えながら読む』です。

他人のコードはもちろん、自分が書いたコードも同じです。

たとえば、『一行レベルでコメントにする』ですね。

それと、『mainメソッドから読む』。

えーっと、例えば質問にあるコード(現時点)での actionPerformedメソッドに着目すると、

Java

1 public void actionPerformed(ActionEvent e) { 2 // txfから文字列を取得し、整数に変換 3 int a =Integer.parseInt(txf.getText()); 4 // ActionEventのオリジナルが txf なら 5 if(e.getSource()==txf) 6 // 答えが 一致したなら 7 if(ans == a) { 8 // 正解と表示 9 lbl.setText("正解!"); 10 // Aさんの答えより小さいなら 11 }else if(ans<a) { 12 // 大きすぎると表示 13 lbl.setText("大きすぎます。"); 14 // それ以外なら 15 }else { 16 // 小さいと表示 17 lbl.setText("小さすぎます"); 18 } 19 // カウントする 20 count++; 21       // カウントが6 なら 22 if(count==6) { 23 // "ゲームオーバー"等のような表示 24 lbl.setText("Game Over! 正解は"+ans+"でした!"); 25 } 26 } 27 }

と言う風に。

そして、上記のコメントを日本語でも英語でもいいから、書き下す。

1. txf から 文字列を取得し、整数に変換 2. ActionEventのオリジナルが txf なら 2.1. 答えが一致したら 2.1.1. 正解と表示 2.2. 大きければ 2.2.1. 大きすぎると表示 2.3. それ以外(小さい)なら 2.3.1. 小さすぎると表示 3. カウントする 4. カウントが 6 なら(= 6回目なら) 4.1. ゲーム―オーバー系のメッセージ

と言う風にする。

それを実際に脳内か現実世界でシミュレーションしてみる。

そうすると『何が足りないのか』とかが見えてきます。

もちろん、『どこにこの処理を突っ込めばいいか』もです。

投稿2021/06/01 08:47

BeatStar

総合スコア4962

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Java

1/* 2 * 文字とか、大きな数字を打つとエラーするのは変わりないので 3 * ご自身で直してください。 4 * 5 * */ 6 7import java.awt.EventQueue; 8import java.awt.event.ActionEvent; 9import java.awt.event.ActionListener; 10import java.nio.file.Path; 11import java.nio.file.Paths; 12import java.util.Random; 13 14import javax.swing.ImageIcon; 15import javax.swing.JFrame; 16import javax.swing.JLabel; 17import javax.swing.JPanel; 18import javax.swing.JTextField; 19import javax.swing.SwingConstants; 20import javax.swing.border.EmptyBorder; 21 22public class Pre09 extends JFrame implements ActionListener { 23 24 private JPanel contentPane; 25 private JTextField txf; // 一度打つと文字を消す場合がめんどいので削除追加。 26 private String str1; // 前回打った数字を保持する。 27 private JLabel lbl; 28 private JLabel lbl2; // 今は何回か分からないので追加 29 private JLabel hnt; 30 31 private JLabel gif; // ここに無いと、gifを他で変えられないのでは? 32 33 Random random = new Random(); 34 int ans = random.nextInt(100); 35 int count =0; 36 37 /** 38 * Launch the application. 39 */ 40 public static void main(String[] args) { 41 EventQueue.invokeLater(new Runnable() { 42 public void run() { 43 try { 44 Pre09 frame = new Pre09(); 45 frame.setVisible(true); 46 } catch (Exception e) { 47 e.printStackTrace(); 48 } 49 } 50 }); 51 } 52 53 /** 54 * Create the frame. 55 */ 56 public Pre09() { 57 setTitle("プレ案"); 58 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 59 setBounds(100, 100, 450, 220); 60 contentPane = new JPanel(); 61 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 62 setContentPane(contentPane); 63 contentPane.setLayout(null); 64 65 lbl = new JLabel("0~100の数字を当ててね!"); 66 lbl.setBounds(20, 24, 350, 13); // 文字足したら小さすぎたので少し大きめにしてる。 67 contentPane.add(lbl); 68 69 lbl2 = new JLabel("今は " + (count+1) + " 回目だよ"); 70 lbl2.setBounds(20, 44, 224, 13); 71 contentPane.add(lbl2); 72 73 txf = new JTextField(); 74 txf.setHorizontalAlignment(SwingConstants.RIGHT); 75 txf.addActionListener(this); 76 txf.setBounds(20, 62, 86, 19); 77 contentPane.add(txf); 78 txf.setColumns(10); 79 80 hnt = new JLabel("ヒント"); 81 hnt.setBounds(20, 99, 147, 13); 82 contentPane.add(hnt); 83 84 gif = new JLabel("gif"); 85 gif.setBounds(304, 65, 100, 100); 86 ImageIcon icon = new ImageIcon("sample.jpg"); 87 gif.setIcon(icon); 88 contentPane.add(gif); 89 Path p1 = Paths.get(""); 90 Path p2 = p1.toAbsolutePath(); 91 92 // 画像を入れる所が分からなかったら、実行した際のcui上のフォルダに入れてみて下さい。 93 System.out.println(p2.toString()); 94 } 95 96 static boolean isNumMatch(String number) { 97 java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("^[0-9]*$"); 98 java.util.regex.Matcher matcher = pattern.matcher(number); 99 return matcher.matches(); 100 } 101 102 public void actionPerformed(ActionEvent e) { 103 104 int a =Integer.parseInt(txf.getText()); 105 if(e.getSource()==txf) 106 if(ans == a) { 107 lbl.setText("正解!"); 108 }else if(ans<a) { 109 lbl.setText("大きすぎます。"); 110 }else { 111 lbl.setText("小さすぎます"); 112 } 113 count++; 114 if(count==6) { 115 lbl.setText("6回目過ぎました! 残念Game Over! 正解は"+ans+"でした!");//文字追加 116 } 117 str1 = txf.getText(); 118 lbl2.setText("今は " + (count+1) + " 回目だよ。前回の値は:" + str1 + "だよ");//追加 119 txf.setText(""); 120 121 switch(count) { 122 case 1: 123 ImageIcon icon1 = new ImageIcon("sample1.png"); 124 gif.setIcon(icon1); 125 break; 126 case 2: 127 ImageIcon icon2 = new ImageIcon("sample2.jpg"); 128 gif.setIcon(icon2); 129 break; 130 case 3: 131 ImageIcon icon3 = new ImageIcon("sample3.png"); 132 gif.setIcon(icon3); 133 break; 134 case 4: 135 ImageIcon icon4 = new ImageIcon("sample4.gif"); 136 gif.setIcon(icon4); 137 break; 138 case 5: 139 ImageIcon icon5 = new ImageIcon("sample5.png"); 140 gif.setIcon(icon5); 141 break; 142 case 6: 143 ImageIcon icon6 = new ImageIcon("sample6.jpg"); 144 gif.setIcon(icon6); 145 break; 146 } 147 148 149 } 150 }

投稿2021/06/01 01:44

pea-cap

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問