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

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

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

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

解決済

Javaでビンゴゲームのコードを作成したい

lino
lino

総合スコア16

Java

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

3回答

0リアクション

2クリップ

1123閲覧

投稿2022/08/31 01:10

前提

Java初心者が研修でビンゴカードゲームを作っています。

実現したいこと

下記2問です。
1.縦5マス、横5マス、計25マスのそれぞれに1〜75までの数字をランダムに配置する。
2.1で作成したビンゴカードでビンゴゲームを行った経過を示す。
例↓
26 64 27 23 17
34 54 65 37 25
24 30 - 57 44
35 68 43 3 18
13 42 38 73 10
1個目: 13
26 64 27 23 17
34 54 65 37 25
24 30 - 57 44
35 68 43 3 18

  • 42 38 73 10

2個目:50
ビンゴになるまで続く...

発生している問題・エラーメッセージ

ネットにあったコードのコピペで問題1は出来ました。問題2に移るために問題1のコードの内容を理解しようとして1行づつ調べていきましたが、途中で処理の意味が分からなくなりました。

よって問題2を解くためのあたりもつけられない状況です。

該当のソースコード

Java

//ArraylistはListインターフェイスを実装したクラス。 //java.util.Collectionsは便利な機能が色々入っているクラス。 import java.util.ArrayList; import java.util.Collections; public class Question07 { //public static void main(String[] args) //public どこからでも参照可能、static インスタンス可しなくても外部から使用可能、void 戻り値無し、main メソッド名 //String[]引数をString型の配列で受け取る、args 引数名。argument public static void main(String[] args) { //ArrayListをINT型に指定する。new演算子でクラスからインスタンスを作る。 //1列目for構文でiに0を代入。iは4以下と指定。iはforで繰り返す毎に0から1づつ増えていく。 ArrayList<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>(); int num = 1; for (int i = 0; i <= 4; i++) { ArrayList<Integer> list = new ArrayList<>(); for (int j = num; j <= num + 14; j++) { list.add(j); } Collections.shuffle(list); lists.add(list); num += 15; } System.out.println(" B | I | N | G | O"); for (int i = 0; i <= 4; i++) { for (int j = 0; j <= 4; j++) { if (i == 2 && j == 2) { System.out.print(" "); } else { System.out.printf("%3d", lists.get(j).get(i)); } if (j != 4) { System.out.print(" |"); } } System.out.println(); } } } //B:1~15 //I:16~30 //N:31~45 //G:46~60 //O:61~75

試したこと

問題1のコードを理解するために1行づつ意味を調べていきました。理解できた所はコメントアウトでメモをコード中に残しています。

for (int j = num; j <= num + 14; j++) {

ここで、書いてある意味は分かるのですが前後のiとの関係が良く分かりません。
iはBINGOカードの1行目で、jは2行目という意味なのでしょうか?

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

問題1のコードは、ビンゴゲームのルールに則ってBは1~15の数字、Iは16~30の数字と数字に制限があります。これは問題1で指示された内容では無いので守らなくても問題ないのですが、ただ私がネット上に転がっていたコードを使ったので、たまたまビンゴゲームのルールに則ったコードになったというだけです。
詰まっている所も、この数字の制限の所のコードが読めない事だと思っています。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/09/05 01:40

こちらの質問が複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました。

dodox86

2022/08/31 01:34

> たまたまビンゴゲームのルールに則ったコードになったというだけです。 詰まっている所も、この数字の制限の所のコードが読めない事だと思っています。 えーと、Javaでのプログラミング研修であろうと言うのに、取り組み方がおかしいってように思いますがそんなことは無いですか。問題を理解してそれを解決するプログラムを書くのがプログラミングなのですが。
dodox86

2022/08/31 01:41

> それを解決するプログラムを書くのがプログラミングなのですが。 内容を理解せずにコピペして作り上げることは含みません。プログラマー、あるいはそれを目指す者でないならそれもあり得るでしょうけど。
lino

2022/08/31 01:44

理想はそうですが。現状0から全て書けと言われて無理なのでこの様な手段をとっています。 コピペでも後で1行づづ理解すれば、次に応用できるからです。
jimbe

2022/08/31 05:07

コードが動作するイメージを持つ必要はあるでしょうね。
BeatStar

2022/08/31 08:31 編集

質問者さん、コードを理解しても次に生かせないと思いますよ。 なんていうか、中間テストの答えを丸暗記して期末テストに臨むような感じの意味不明感です。 プログラミングって、実際には穴埋め問題とかみたいにすでに答えがあるものじゃなくて小説を書くときみたいなまっさらな状態からロジック上の間違いを出さずに書いていくものです。 数学の証明問題で、しかも https://www.asahi.com/articles/ASP937HM6P8ZULBJ00T.html にあるようなプロでも頭を悩ますような殆ど答えがないものを解くようなものだから、もしプロになりたいと思っているのならコードを自分で考えることができるようにするかすっぱりと諦めるしかないかと。
kazuma-s

2022/08/31 11:53

> ネットにあったコードのコピペで問題1は出来ました。 出来ていないと思います。 そのコードを実行して表示されるものは、1~75までの数字をランダムに配置していません。 各行が昇順になっていて、B の列には 1~15、I の列には 16~30 の値が入っています。 質問にある例ではそうなっていませんよね。
Crimson_Tide

2022/08/31 14:34

> System.out.println(" B | I | N | G | O"); の直前までの処理で、ざっくり何をしようとしているのか理解できていますか? listsの中身がどのようになるか想像つきますか? > ArrayList<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>(); > int num = 1; > ArrayList<Integer> list = new ArrayList<>(); > list.add(j); > Collections.shuffle(list); > lists.add(list); > num += 15; for文以外の各処理がどういうことをしているか説明できますか?調べたらこう書いてあったからこうなんだろうではなく、ちゃんとどういった処理なのか理解できているでしょうかという質問です。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

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