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

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

新規登録して質問してみよう
ただいま回答率
85.48%
ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

1731閲覧

ビンゴアプリで、一度出た数字を配列に保存する方法が知りたいです。

Eltk

総合スコア51

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/03/02 14:41

先日、以下の質問をした者です。
https://teratail.com/questions/244214

この質問の続きで、新たに途中で詰まってしまったので、質問させていただきました。

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
ビンゴで、一度出た数字が再度出ないようにしたいです。
※イメージ写真は0-99までの数字ですが、今回は1-50までの数字での作成を試みています。

該当のソースコード

Visual

1※マスターページです。こちらのファイルは作成後何も変更しておりません。 2<%@ Master Language="VB" AutoEventWireup="false" CodeBehind="Site1.master.vb" Inherits="bingo.Site1" %> 3 4<!DOCTYPE html> 5 6<html> 7<head runat="server"> 8<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 9 <title></title> 10 <asp:ContentPlaceHolder ID="head" runat="server"> 11 </asp:ContentPlaceHolder> 12</head> 13<body> 14 <form id="form1" runat="server"> 15 <div> 16 <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> 17 </asp:ContentPlaceHolder> 18 </div> 19 </form> 20</body> 21</html>

Visual

1※マスターページを含むWebフォームです。(top.aspx) 2<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site1.Master" CodeBehind="top.aspx.vb" Inherits="bingo.top" %> 3<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 4 <link rel="stylesheet" type="text/css" href="../CSS/top.css"> 5</asp:Content> 6<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 7 <div class="parent_container"> 8 <div class="left_container"> 9 <div class="number_wrap"> 10 <div><asp:Label ID="Label1" runat="server" Text="1" CssClass="num"></asp:Label></div> 11 <div><asp:Label ID="Label2" runat="server" Text="2" CssClass="num"></asp:Label></div> 12 <div><asp:Label ID="Label3" runat="server" Text="3" CssClass="num"></asp:Label></div> 13 <div><asp:Label ID="Label4" runat="server" Text="4" CssClass="num"></asp:Label></div> 14 <div><asp:Label ID="Label5" runat="server" Text="5" CssClass="num"></asp:Label></div> 15 <div><asp:Label ID="Label6" runat="server" Text="6" CssClass="num"></asp:Label></div> 16 <div><asp:Label ID="Label7" runat="server" Text="7" CssClass="num"></asp:Label></div> 17 <div><asp:Label ID="Label8" runat="server" Text="8" CssClass="num"></asp:Label></div> 18 <div><asp:Label ID="Label9" runat="server" Text="9" CssClass="num"></asp:Label></div> 19 <div><asp:Label ID="Label10" runat="server" Text="10" CssClass="num"></asp:Label></div> 20 <div><asp:Label ID="Label11" runat="server" Text="11" CssClass="num"></asp:Label></div> 21 <div><asp:Label ID="Label12" runat="server" Text="12" CssClass="num"></asp:Label></div> 22 <div><asp:Label ID="Label13" runat="server" Text="13" CssClass="num"></asp:Label></div> 23 <div><asp:Label ID="Label14" runat="server" Text="14" CssClass="num"></asp:Label></div> 24 <div><asp:Label ID="Label15" runat="server" Text="15" CssClass="num"></asp:Label></div> 25 <div><asp:Label ID="Label16" runat="server" Text="16" CssClass="num"></asp:Label></div> 26 <div><asp:Label ID="Label17" runat="server" Text="17" CssClass="num"></asp:Label></div> 27 <div><asp:Label ID="Label18" runat="server" Text="18" CssClass="num"></asp:Label></div> 28 <div><asp:Label ID="Label19" runat="server" Text="19" CssClass="num"></asp:Label></div> 29 <div><asp:Label ID="Label20" runat="server" Text="20" CssClass="num"></asp:Label></div> 30 <div><asp:Label ID="Label21" runat="server" Text="21" CssClass="num"></asp:Label></div> 31 <div><asp:Label ID="Label22" runat="server" Text="22" CssClass="num"></asp:Label></div> 32 <div><asp:Label ID="Label23" runat="server" Text="23" CssClass="num"></asp:Label></div> 33 <div><asp:Label ID="Label24" runat="server" Text="24" CssClass="num"></asp:Label></div> 34 <div><asp:Label ID="Label25" runat="server" Text="25" CssClass="num"></asp:Label></div> 35 <div><asp:Label ID="Label26" runat="server" Text="26" CssClass="num"></asp:Label></div> 36 <div><asp:Label ID="Label27" runat="server" Text="27" CssClass="num"></asp:Label></div> 37 <div><asp:Label ID="Label28" runat="server" Text="28" CssClass="num"></asp:Label></div> 38 <div><asp:Label ID="Label29" runat="server" Text="29" CssClass="num"></asp:Label></div> 39 <div><asp:Label ID="Label30" runat="server" Text="30" CssClass="num"></asp:Label></div> 40 <div><asp:Label ID="Label31" runat="server" Text="31" CssClass="num"></asp:Label></div> 41 <div><asp:Label ID="Label32" runat="server" Text="32" CssClass="num"></asp:Label></div> 42 <div><asp:Label ID="Label33" runat="server" Text="33" CssClass="num"></asp:Label></div> 43 <div><asp:Label ID="Label34" runat="server" Text="34" CssClass="num"></asp:Label></div> 44 <div><asp:Label ID="Label35" runat="server" Text="35" CssClass="num"></asp:Label></div> 45 <div><asp:Label ID="Label36" runat="server" Text="36" CssClass="num"></asp:Label></div> 46 <div><asp:Label ID="Label37" runat="server" Text="37" CssClass="num"></asp:Label></div> 47 <div><asp:Label ID="Label38" runat="server" Text="38" CssClass="num"></asp:Label></div> 48 <div><asp:Label ID="Label39" runat="server" Text="39" CssClass="num"></asp:Label></div> 49 <div><asp:Label ID="Label40" runat="server" Text="40" CssClass="num"></asp:Label></div> 50 <div><asp:Label ID="Label41" runat="server" Text="41" CssClass="num"></asp:Label></div> 51 <div><asp:Label ID="Label42" runat="server" Text="42" CssClass="num"></asp:Label></div> 52 <div><asp:Label ID="Label43" runat="server" Text="43" CssClass="num"></asp:Label></div> 53 <div><asp:Label ID="Label44" runat="server" Text="44" CssClass="num"></asp:Label></div> 54 <div><asp:Label ID="Label45" runat="server" Text="45" CssClass="num"></asp:Label></div> 55 <div><asp:Label ID="Label46" runat="server" Text="46" CssClass="num"></asp:Label></div> 56 <div><asp:Label ID="Label47" runat="server" Text="47" CssClass="num"></asp:Label></div> 57 <div><asp:Label ID="Label48" runat="server" Text="48" CssClass="num"></asp:Label></div> 58 <div><asp:Label ID="Label49" runat="server" Text="49" CssClass="num"></asp:Label></div> 59 <div><asp:Label ID="Label50" runat="server" Text="50" CssClass="num"></asp:Label></div> 60 </div> 61 62 </div> 63 <div class="right_container"> 64 <div class="num_result_container"> 65 <asp:Label ID="num_result" runat="server" Text="今回の番号は..."></asp:Label> 66 </div> 67 <div class="button_container"> 68 <asp:Button ID="Button1" runat="server" Text="抽選ボタン" CssClass="button" /> 69 </div> 70 </div> 71 </div> 72</asp:Content>

Visual

1※vbファイルです。(top.aspx.vb) 2Public Class top 3 Inherits System.Web.UI.Page 4 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 5 6 End Sub 7 8 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 9 Dim rnd As New Random 10 Dim bingo_num As Integer = rnd.Next(1, 51) 11 Dim bingo_array(50) As Integer 12 13 num_result.Text = bingo_num.ToString 14 End Sub 15End Class

試したこと

以下のように考えました。
①1-50までの乱数を生成し、変数に格納
②出た数字を配列にも格納する。
③次に出た数字が、格納した配列の中の数字と一致した場合は、(一致しない数字が出るまで)乱数を生成

この、「②で配列に数字を格納する方法が知りたい」と思っているのですが、
ネットで調べても、「配列のインデックスを指定して、指定した要素を格納する方法」ばかりで、
・「とりあえず、数字を配列の先頭から順に格納する方法」
・「次に出た数字が、配列の中の数字のいずれかと合致しているかを確認する条件文の書き方」
がわかりません。

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

統合開発環境
Visual Studio2019
(言語:VB.NET、プロジェクトテンプレート:ASP.NET Webアプリケーション)

使用PC
Windows10

※平日は仕事のため、返信が19:30以降になります。
どうぞよろしくお願いします。

イメージ説明

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/03/02 22:40

前のスレッドの話はベタ書きする方向で行くことに決めたようですが、であればその旨前のスレッドの解答欄に書いて、スレッドをクローズしてください。
Eltk

2020/03/03 11:46

かしこまりました。 先程、教えていただいた通りにスレッドをクローズさせていただきました。
guest

回答2

0

ベストアンサー

やり方を以下のようにしてはいかがですか?

(1) 1 - 50 の数字をシャッフルして配列を作り保存しておく。web アプリはステートレスであることをお忘れなく。保存には Session とか ViewState などを使う必要があります。

(2) 最初のボタンクリックで配列の先頭から、次のクリックでその次から順に数字を配列から取得する。今何番目かも Session とか ViewState に保持する必要があります。

(3) 上記 (2) で取得した数字に該当する Label の色を変える (CssClass とか ForeColor を変える)。

(4) 上記 (2) で保存した「何番目」が配列の最後になるまで繰り返す。

ビンゴ判定をどうするかによってまた話は変わってくるかもしれませんが・・・

投稿2020/03/02 23:22

編集2020/03/03 00:51
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Eltk

2020/03/03 11:45

YAmaGNZさんとはまた別の回答をいただき、ありがとうございます。 内容につきまして、頭の中では概ね理解できました。(※具体的な書き方がまだわかっていないので、試してみないとわかりませんが。。) SurferOnWwwさんのやり方だと、毎回シャッフルするのではなく一度シャッフルするだけで良いという点が、コードを書く上で書きやすくなるメリットになりそうですね。 今、YAmaGNZさんからいただいた回答を試していますので、そちらの区切りがついたらSurferOnWwwさんからいただいた方法を試してみたいと思います。 時間がかかるかもしれませんが、両方チャレンジした上で、今の自分に合っていそうな方法で取り組んでみようと思います。 ですので、ベストアンサー選択はもうしばらくお待ち下さいませ。
退会済みユーザー

退会済みユーザー

2020/03/03 21:31 編集

私のレスのやり方を理解してもらえてないようです。 質問者さんが考えたやり方は、ちょっと例えが悪いかもしれませんが、以下のような話です。 (1) 開封したばかりで番号順に並んでいるトランプの束がある。 (2) 乱数発生器があり 1 - 50 の数字をランダムに表示する。ただし、すでに出た番号と同じ番号が出ることがある。 (3) 乱数発生器が出す番号に従ってトランプの束からその番号のカードを取り出してテーブルに並べる。 (4) 上記 (3) ですでにテーブルに並べてあるカードの番号が出たら、乱数発生器を再度動かしてテーブルに並んでないカードと別の番号を得て、トランプの束からその番号のカードを取り出してテーブルに並べる。(トランプの束の残りの枚数が減るにつれて乱数発生器を再度動かさなければならない回数が増える) (5) トランプの束からカードがなくなるまで (3), (4) を繰り返す。 上記に対して、私の提案は、開封したばかりのトランプをシャッフルして、シャッフルされたトランプの束の上から順番にテーブルに並べていくということです。 タイトルにある「一度出た数字を配列に保存する」というようなことは不要です。トランプの束の上から順番に並べていくだけでよくて、それで番号がダブることは絶対にありません。乱数発生器も必要ないです。 再度ビンゴを行うときはテーブルの上のカードを回収してシャッフルし、シャッフルしたトランプの束の上から順にテーブルに並べて行けばいいです。 その方がスマートだと思いませんか?
Eltk

2020/03/04 11:10

例えていただいた内容を確認して、今やっと 「トランプの束の残りの枚数が減るにつれて乱数発生器を再度動かさなければならない回数が増える」 ことに気づきました。 そうですね。確かに非効率です。 やり方を、教えていただいた方法に変えようと思います。 ※コメントに対してのコメントは僕の方に通知が来ないようで、仕事から帰宅して今はじめて上記(いただいた)コメントを確認しました。また遅くなるかもしれませんが、今から再チャレンジします。 ありがとうございます。
Eltk

2020/03/05 11:23

遅くなりすみません。 まだ、作成途中で、詰まったり調べたりしながらなんとか格闘しておりますが、 回答をいただいてからもうすぐ3日経ちそうですので、 今回の質問についてはクローズし、解決しなかったらまた新しく質問スレを立てます。 SurferOnWwwさんの方法で作成を試みておりますので、ベストアンサーにさせていただきます。 YAmaGNZさんも教えていただき、ありがとうございました。
guest

0

Listを使われるのがいいかと思います。

VBNET

1Dim Numbers As New List(Of Integer) 2 3'追加するとき 4Numbers.Add(1) 5 6'Listに存在するか 7Numbers.Contains(1) 8

詳しくはList<T>クラスのリファレンスを見るなり、検索するなりしてください。

検索に関しても分からないことを素直に日本語で検索すると結構ヒットしたりします。
今回の場合ですと、「VBNET 配列 値を追加する」や「VBNET 配列の中に存在するかチェックする」と検索すれば欲しい情報は得られたかと思います。

投稿2020/03/02 22:22

YAmaGNZ

総合スコア10258

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

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

Eltk

2020/03/03 11:39

配列のようなものでListというのがあるんですね。 具体的なコードや検索方法も書いていただき、ありがとうございます。 今、教えていただいたコードを基にチャレンジしているところなのですが、 Listの中にビンゴで出た数字がなかった場合色を変える、コードの書き方でつまりました。 (※ところどころ空いていますが、以下の状態でつまりました) If Not Numbers.Contains(bingo_num) Then Numbers.Add(bingo_num) Else End If 色の変更は、 「Label X.Forecolor = red」のようにするのだと思いますが、 LabelとXを切り離してbingo_numと一致するかどうかの判定方法がわからない状態です。 もし可能でしたら、「赤色に変える方法」も教えていただけたりしますでしょうか。 この質問が「タイトルの範疇から外れているので新しく質問しなおさなければならない」ということでしたら、失礼しました。出直してきます。
YAmaGNZ

2020/03/03 12:30

私はASP.NETに関しては分からないので、その部分に関してはお力になれないかと思います。
Eltk

2020/03/04 11:06

失礼しました。 いえいえ、こちらこそ、一度回答をいただいているのに、申し訳ございませんでした。 少し考えてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問