VB2010を使って、基礎から勉強中です。
テキストに紹介してあるサンプルプログラムを作っているところですが、
どうしても、わからないところがあります。
乱数を発生させ、こんばんはという文字を、5つのボタンにランダムに表示させて
ボタンをクリックして、なんという言葉か当てるゲームです。
その中で、For ~ Nextの中に入力されている内容の意味を
詳しく知りたいです。よろしくお願いします。
Public Class Form1
Private answer As String = "こんばんは" '答え
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'答えを文字列の配列に変換
Dim moji() As Char = answer.ToCharArray()
'文字入れ替え
Dim rnd As New Random() '乱数を発生させる
For i As Integer = 1 To 10
Dim n1 As Integer = rnd.Next(5)
Dim n2 As Integer = rnd.Next(5)
Dim m As Char = moji(n1)
moji(n1) = moji(n2)
moji(n2) = m
Next
Button1.Text = moji(0)
Button2.Text = moji(1)
Button3.Text = moji(2)
Button4.Text = moji(3)
Button5.Text = moji(4)
'回答欄を初期化
Label2.Text = ""
End Sub
Private Sub btns_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click,
Button2.Click, Button3.Click, Button4.Click, Button5.Click
Dim btn As Button = CType(sender, Button)
Label2.Text &= btn.Text
btn.Visible = False
If Label2.Text = answer Then
MsgBox("おめでとう", 0, "正解")
ElseIf Label2.Text.Length >= answer.Length Then
MsgBox("残念!", 0, "不正解")
End If
No.2ベストアンサー
- 回答日時:
プログラムの頭から「'答えを文字列の配列に変換」までで、
moji(0) = 'こ'
moji(1) = 'ん'
moji(2) = 'ば'
moji(3) = 'ん'
moji(4) = 'は'
になっていますね。
さてforの中身は。
まず、
入れ替え元のindex番号 n1 (0から4の間)
入れ替え先のindex番号 n2 (0から4の間)
を乱数で選びます。
そして次の3行で、moji(n1) と moji(n2) を入れ替えています。
なぜ m を介しているかというと……。
moji(0) と moji(1) を入れ替えることを考えてみましょう。
いきなり moji(0) = moji(1) を実行してしまうと、
moji(0) = 'ん'
moji(1) = 'ん'
になっちゃいます。
だから、m = moji(0) として'こ'を保存しておけば、続く2行で
moji(0) = moji(1) ' moji(0)='ん'
moji(1) = m ' moji(1)='こ'
と、入れ替えられるわけです。
for~next文で、それを10回繰り返して、シャッフルしているというわけです。
(n1 と n2 が等しい場合、その1回はシャッフルされてないことになりますが、まあ大きな影響は無いでしょう)
ありがとうございます。すっきりしました。
テキストには詳しく解説がなかったので4日間ぐらい悩んでました。
丁寧に答えていただきありがとうございました。
No.1
- 回答日時:
まず、オブジェクト指向プログラミングの独特の記述法を説明します。
オブジェクトの実体名 = new オブジェクト名
例 VBプログラムでエクセルシートを操るとき、
プログラム上のエクセルブック名 = New Excel.Application
プログラム上のエクセルブック名.操作命令( )
といった形で、名前を付けて実体化したオブジェクト(インスタンス)の命令を使う形を取ります。
質問のコードの場合、
乱数のオブジェクトRANDOMにrndと名前を付けて、乱数発生命令 next( )を働かせています。
rnt.next(5)とすれば、0以上5未満の乱数が発生するので、0番から4番までの配列の添字の指定ができます。
例えば、4番と1番の文字を入れ替えよとか、0番と2番の文字を入れ替えよとか、気まぐれに入れ替えをします。この気まぐれな入れ替えを10回すると語群の順番は大きく入れ替わります。
このようにして、5つの語群の順番を入れ替えてしまう動作をします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パワーポイントの画面がずれる
-
Excelにメールを添付する
-
Excelで隠れてしまった図...
-
パワーポイントにエクセルの表...
-
テキストボックスがないのに、...
-
エクセルの[コントロールの書式...
-
excelでチェックボックスが表示...
-
イラストレーターで水面の網目模様
-
3Dオブジェクトとはなんですか?
-
イラストレーター(Illustrator)...
-
EMBED関数について
-
pdf xchange viewer オブジェク...
-
オートシェイプが消えたり出た...
-
Excelの中にExcelのオブジェク...
-
オブジェクトがシートからはみ...
-
Illustrator CS4 : 特定のレイ...
-
エクセルの塗りつぶしで斜線を...
-
イラストレーターの面積を求める
-
EXCELのグラフのオブジェクト変...
-
エクセルに入力しようとすると...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントの画面がずれる
-
Excelにメールを添付する
-
Excelで隠れてしまった図...
-
excelでチェックボックスが表示...
-
パワーポイントにエクセルの表...
-
ExcelでB5をA4にしたい。
-
pdf xchange viewer オブジェク...
-
イラストレーターの面積を求める
-
オートシェイプが消えたり出た...
-
文字の特定箇所に背景色をつけ...
-
エクセルに入力しようとすると...
-
EMBED関数について
-
テキストボックスがないのに、...
-
【エクセル】列を挿入しようと...
-
Wordのツールバーに常に数...
-
Excelの中にExcelのオブジェク...
-
エクセルからワードへの表挿入...
-
Wordのオブジェットと図の違い...
-
エクセルに任意のページのワー...
-
Illustrator CS4 : 特定のレイ...
おすすめ情報