乱数について

解決


まさる  2009-06-27 05:18:51  No: 145994  IP: 192.*.*.*

乱数を使っておみくじゲームを作りましたが、
同じものが続けて3回くらいでることがあります。
毎回、異なるようにすることはできないのでしょうか?



Public Class おみくじ
    Const max As Integer = 3
    Const daikiti As Integer = 0
    Const kiti As Integer = 1
    Const kyou As Integer = 2
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim lots As Integer
        lots = kansu(max)
        If lots = daikiti Then
            Label1.Text = "やりました。大吉です"
        ElseIf lots = kiti Then
            Label1.Text = "まあまあ、吉です"
        ElseIf lots = kyou Then
            Label1.Text = "がっかり凶です"

        End If
    End Sub

    Function kansu(ByVal i As Integer) As Integer
        Dim myrandom = New Random
        
        Return myrandom.Next(i)

    End Function
End Class

編集 削除
とろ  2009-06-27 08:03:13  No: 145995  IP: 192.*.*.*

>毎回、異なるようにする

となればすでに乱数ではありません。

>ことはできないのでしょうか

履歴を配列で覚えておいて、今回出てほしくないものが出たときは再度コールすればいい。

まずは
>毎回、異なるようにする
この仕様をはっきり明文化することが必要です。

編集 削除
まさる  2009-06-27 09:15:10  No: 145996  IP: 192.*.*.*

>>毎回、異なるようにする

>となればすでに乱数ではありません。
確かにおっしゃるとおりですね。

>ことはできないのでしょうか

>履歴を配列で覚えておいて、今回出てほしくないものが出たときは再度コー>ルすればいい。
この部分のコードを考える必要があるということですね。


>>毎回、異なるようにする
>この仕様をはっきり明文化することが必要です。
同じものが3回以上続けてでないようにしたいのですが

編集 削除
とろ  2009-06-27 12:29:14  No: 145997  IP: 192.*.*.*

>同じものが3回以上続けてでない

仕様がこれだけならば、
  ふたつ前の結果を変数に記憶する機能を追加
    (TextBox.Textの左端の1文字だけで済む)
  ひとつ前の結果はTextBoxに記憶されている
ことにより

や・や・や
ま・ま・ま
が・が・が

の場合はもう一度処理すればOK
アイデアだけですが・・・

#特別な場合として「ひとつ前」「ふたつ前」の
#記録が存在しない場合について考慮する必要が
#あります

編集 削除
しんご  2009-06-29 22:23:45  No: 145998  IP: 192.*.*.*

>同じものが3回以上続けてでない

なので、大吉を○、吉を△、凶を×とすると

例1:○△×
例2:○○×
例3:○×○
例4:×○○

はいずれも条件を満たすことになります。
しかし例4の場合、次に○がきたらダメですよね?

というわけで、同じ結果が2回連続ででたとき、
3回目にそれだけでないようにすればいいと思います。

ですので、追加で必要な変数は、2回続けてでたおみくじを
保存する変数を1つ用意すればいいと思います。
(3回目は、その変数以外から選ぶ)

仮に変数をXとすると

X=−1:初期値、連続してない状態
X=0:大吉が2回連続で出た
X=1:吉が2回連続で出た
X=2:凶が2回連続で出た

てな具合でいかがでしょうか?

編集 削除
まさる  2009-06-30 10:13:31  No: 145999  IP: 192.*.*.*

ありがとうございます。

う〜ん。下記のように考えてみましたが、思うような動きはしません
どこが間違えているのでしょうか?


Public Class おみくじ
    Const max As Integer = 3
    Const daikiti As Integer = 0
    Const kiti As Integer = 1
    Const kyou As Integer = 2

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim lots As Integer
  Dim oldlots As Integer = kansu(max) '変数lotsの直前の変数
Do Until lots <> oldlots '変数とその直前の変数が等しくないときループ 終了

            lots = kansu(max)
        Loop

        If lots = daikiti Then
            Label1.Text = "やりました。大吉です"
        ElseIf lots = kiti Then

            Label1.Text = "まあまあ、吉です"
        ElseIf lots = kyou Then
            Label1.Text = "がっかり凶です"

        End If
    End Sub

    Function kansu(ByVal i As Integer) As Integer
        Dim myrandom = New Random()

        
        Return myrandom.Next(i)

    End Function
End Class

編集 削除
まさる  2009-06-30 11:12:06  No: 146000  IP: 192.*.*.*

これでもダメですね。

Public Class おみくじ
    Const max As Integer = 3
    Const daikiti As Integer = 0
    Const kiti As Integer = 1
    Const kyou As Integer = 2

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim oldlots As Integer 'lotsの直前の変数
        Dim lots As Integer
        oldlots = kansu1(max)
        lots = kansu2(max)

        Do Until lots <> oldlots '変数とその直前の変数が等しくないときループ終了

            lots = kansu3(max)
        Loop

        If lots = daikiti Then
            Label1.Text = "やりました。大吉です"
        ElseIf lots = kiti Then

            Label1.Text = "まあまあ、吉です"
        ElseIf lots = kyou Then
            Label1.Text = "がっかり凶です"

        End If
    End Sub

    Function kansu1(ByVal i As Integer) As Integer
        Dim mrandom = New Random()


        Return mrandom.Next(i)

    End Function

    Function kansu2(ByVal i As Integer) As Integer
        Dim mydom = New Random()
        Return mydom.Next(i)

    End Function
    Function kansu3(ByVal i As Integer) As Integer
        Dim myrandom = New Random()
        Return myrandom.Next(i)

    End Function
End Class

編集 削除
まさる  2009-06-30 11:18:03  No: 146001  IP: 192.*.*.*

頭の悪い私でした。
1回目              1回目
oldlots = 0          oldlots = 1
lots = 2             lots = 2
でも下記の式が成立してループは終了するのでした。
    Do Until lots <> oldlots '変数とその直前の変数が等しくないときループ終了
すみません。出直してきます

編集 削除
まさる  2009-06-30 12:30:26  No: 146002  IP: 192.*.*.*

すみません。上記の3つの投稿は無視してください。

自分なりに同じものが2回でないようなコードをつくろうとしていますが、
下記のコードで完成したかな?と思いましたが、意図した動作をしません、
どこが間違っているのかアドバイスいただければ有り難いです
Public Class おみくじ
    Const max As Integer = 3
    Const daikiti As Integer = 0
    Const kiti As Integer = 1
    Const kyou As Integer = 2
   


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim oldlots As Integer 'lotsの直前の変数
        Dim lots As Integer

        
        Do Until lots <> oldlots '変数とその直前の変数が等しくないときループ終了
            oldlots = lots
            lots = kansu(max)

        Loop

        If lots = daikiti Then
            Label1.Text = "やりました。大吉です"
        ElseIf lots = kiti Then

            Label1.Text = "まあまあ、吉です"
        ElseIf lots = kyou Then
            Label1.Text = "がっかり凶です"

        End If
    End Sub

    Function kansu(ByVal i As Integer) As Integer
        Dim mrandom = New Random()


        Return mrandom.Next(i)

    End Function

End Class

編集 削除
まさる  2009-06-30 13:16:51  No: 146003  IP: 192.*.*.*

一部修正しましたが、これでもだめです。
Public Class おみくじ
    Const max As Integer = 3
    Const daikiti As Integer = 0
    Const kiti As Integer = 1
    Const kyou As Integer = 2
   


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim oldlots As Integer
        Dim lots1 As Integer
        Dim lots As Integer

        lots = kansu(max)
       

        Do Until lots1 <> oldlots '変数とその直前の変数が等しくないときループ終了
            oldlots = lots
            lots1 = kansu(max)

        Loop

        If lots = daikiti Then
            Label1.Text = "やりました。大吉です"
        ElseIf lots = kiti Then

            Label1.Text = "まあまあ、吉です"
        ElseIf lots = kyou Then
            Label1.Text = "がっかり凶です"

        End If
    End Sub

    Function kansu(ByVal i As Integer) As Integer
        Dim mrandom = New Random()


        Return mrandom.Next(i)

    End Function
    
End Class

編集 削除
shazbot  2009-06-30 13:22:05  No: 146004  IP: 192.*.*.*

根本的な問題なようなので、解決のヒントをば。

>    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
>        Dim oldlots As Integer 'lotsの直前の変数

二行目にブレークポイントを設定して、ボタンが押されるたびに oldlots 変数がどうなっているかを確認してみましょう。

プロシージャ内で宣言されるローカル変数は、そのプロシージャが終了したときに破棄されますよ。前回の値を保存する変数を、クラス内でプロシージャの外で宣言してみましょう。


次に、『二回同じおみくじが出た』ということを記録する方法ですが、変数は

  ・前回でた結果              (integer)
  ・二回連続出ているかどうか  (boolean)

この二つを用意したほうが、判りやすいかとおもいます。これらをプロシージャの外で宣言する方法で、がんばってみてください。

編集 削除
まさる  2009-06-30 15:19:27  No: 146005  IP: 192.*.*.*

shazbotさん、ありがとうございます。
実は下記のようにすると同じ結果が2回続けて出ることはなくなりました。


Public Class おみくじ
    Const max As Integer = 3
    Const daikiti As Integer = 0
    Const kiti As Integer = 1
    Const kyou As Integer = 2
    Dim oldlots As Integer '前回出た結果
    Dim lots As Integer '今回出た結果
    

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     


                

        Do

            oldlots = lots
            lots = kansu(max)


        Loop Until lots <> oldlots  '変数とその直前の変数が等しくないときループ終了


        If lots = daikiti Then
            Label1.Text = "やりました。大吉です"
        ElseIf lots = kiti Then

            Label1.Text = "まあまあ、吉です"
        ElseIf lots = kyou Then
            Label1.Text = "がっかり凶です"

        End If
    End Sub

    Function kansu(ByVal i As Integer) As Integer
        Dim mrandom = New Random()


        Return mrandom.Next(i)

    End Function
    
End Class


ちなみに・二回連続出ているかどうか  (boolean)
の使い方のヒントでもおしえていただけたら嬉しく思います。

編集 削除
shazbot  2009-06-30 23:06:02  No: 146006  IP: 192.*.*.*

処理を、ブレークポイントなりで一行ずつ目で追って、何が行われているのか確認してみましょう。そうすれば、おのずと問題点がわかるはずです。

そのコードだと、問題点は以下のとおり

・一回目、絶対に大吉が出ない(oldlotsの初期値は・・・?)
・二連続で同じ値が出ない(3連続はダメでも、2連続はOKのはず)

解決策を考えて見ましょう。

-ヒント
・oldlotsに初期値を設定する
・おみくじの結果が決まったあと、それがoldlots(今回の結果に更新する前の!)と同じかを調べる。
  
  ・同じであった場合、
    - これが1回目なの2回目なのか、フラグ(boolean)を立てて識別する。


これ以上のヒントは、もう答えになりそうですが・・・

失礼ですが、スレッドを見る限り、アルゴリズムの基本的な構築ができてないように感じます。紙にフローチャートを書いて考えてみるのもいいとおもいますよ。

編集 削除
まさる  2009-07-01 11:15:34  No: 146007  IP: 192.*.*.*

Dim oldlots As Integer = -1 が適当なのかな?

後は、わからなくなってしまい、お手上げ、思考不能になりました。

しばらく休んでから、また考えてみようと思ってます。
愚鈍なわたしにアドバイスいただき感謝しております。

編集 削除
まさる  2009-07-01 15:13:48  No: 146008  IP: 192.*.*.*

shazbotさんへ
おしえていただいた仕様は、ボタン一つのイベントでは実現できないですよね。ちがうでしょうか?

編集 削除
特攻隊長まるるう  2009-07-02 13:11:26  No: 146009  IP: 192.*.*.*

ボタン1つでも複数回押した時の処理として実現できます。

編集 削除
まさる  2009-07-02 19:54:43  No: 146010  IP: 192.*.*.*

>ボタン1つでも複数回押した時の処理として実現できます
そうなのですか?
今、いろいろ調べているのですが難しいものですね。
ただ、Dim oldlots As Integer = -1 は、正解のような気がしますが
いかがでしょうか?

編集 削除
特攻隊長まるるう  2009-07-02 21:05:32  No: 146011  IP: 192.*.*.*

> ただ、Dim oldlots As Integer = -1 は、正解のような気がしますが
正解だと思います。

プログラムから離れて。。。おみくじの紙3枚用意して
1つ前に何が出たかメモしながら3連続出たことが
メモできないって言ってる???

プログラムでは変数にメモするだけなんですが。

1回目なのか2回目なのかのフラグ(boolean)
が理解できないなら、単純に何回連続なのか
数字で覚えたら?

編集 削除
まさる  2009-07-03 10:55:06  No: 146012  IP: 192.*.*.*

ちがうかもしれませんが、いちおう下記の条件は解決できました
・一回目、絶対に大吉が出ない(oldlotsの初期値は・・・?)
・二連続で同じ値が出ない(3連続はダメでも、2連続はOKのはず)


フラグの使い方がいまいちわからず、こうしたコードになって
しまいました。

Public Class おみくじ
    Const max As Integer = 3
    Const daikiti As Integer = 0
    Const kiti As Integer = 1
    Const kyou As Integer = 2
    Dim oldlots As Integer = -1  '前々回出た結果
    Dim lots As Integer = -1   '前回出た結果
    Dim lots2 As Integer '今回出た結果

    
   
    

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      
        Do

            oldlots = lots
            lots = lots2
            lots2 = kansu(max)


        Loop Until lots2 <> oldlots '今回と前々回出た結果が等しくないときループ終了

        If lots2 = daikiti Then
            Label1.Text = "やりました。大吉です"
        ElseIf lots2 = kiti Then

            Label1.Text = "まあまあ、吉です"
        ElseIf lots2 = kyou Then
            Label1.Text = "がっかり凶です"

        End If
    End Sub

    Function kansu(ByVal i As Integer) As Integer
      
        Dim mrandom = New Random()

        Return mrandom.Next(max)

    End Function


End Class

編集 削除
しんご  2009-07-03 21:49:54  No: 146013  IP: 192.*.*.*

Do
    oldlots = lots
    lots = lots2
    lots2 = kansu(max)
Loop Until lots2 <> oldlots '今回と前々回出た結果が等しくないときループ終了

これはまずいでしょう。
1回目のループ処理で、lots2 = oldlots だった場合
2回目のループ処理に入るわけですが、
oldlots、lots、lots2 を書き換えるのはダメでしょう。。
実際に出たおみくじを変数に保存しないと・・

しかもこのプログラムでは、
今回と前々回の結果を比較していますが、仕様では
3連続同じ結果は出ない、ということだったと思いますが?

フローチャートを紙に書いて考えてみましたか?
プログラムをあれこれ書いても残念ながら解決しないと
思いますよ?急がば回れです。

編集 削除
まさる  2009-07-04 05:56:15  No: 146014  IP: 192.*.*.*

>しかもこのプログラムでは、
>今回と前々回の結果を比較していますが、仕様では
>3連続同じ結果は出ない、ということだったと思いますが?
文法の解釈を誤っていたのに気づきました。
下記のように修正しました。
いちおう意図する動きはしているのですが?


Public Class おみくじ
    Const max As Integer = 3
    Const daikiti As Integer = 0
    Const kiti As Integer = 1
    Const kyou As Integer = 2
    Dim oldlots As Integer = -1 '前々回出た結果
    Dim lots As Integer = -1   '前回出た結果
    Dim lots2 As Integer '今回出た結果

    
   
    

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      


        oldlots = lots
        lots = lots2
        lots2 = kansu(max)

        If lots2 = oldlots Then   '今回と前々回出た結果が等しい場合                                    は、結果の数値が異なるまで今回の結果をループ
            Do Until lots2 <> oldlots

                lots2 = kansu(3)

            Loop

        End If



        If lots2 = daikiti Then
            Label1.Text = "やりました。大吉です"
        ElseIf lots2 = kiti Then

            Label1.Text = "まあまあ、吉です"
        ElseIf lots2 = kyou Then
            Label1.Text = "がっかり凶です"

        End If
    End Sub

    Function kansu(ByVal i As Integer) As Integer
      
        Dim mrandom = New Random()

        Return mrandom.Next(i)

    End Function


End Class

編集 削除
まさる  2009-07-04 07:12:27  No: 146015  IP: 192.*.*.*

意図した動きはしていますが?どこがおかしいのでしょうか

Public Class Form1

    Dim omikuzi() As String
    Dim oldlots As Integer = -1 '前々回の結果
    Dim lots As Integer = -1 '前回の結果

    Dim lots2 As Integer '今回の結果
   
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        omikuzi = New String() {"やりました。大吉です", "まあまあ、吉です", "がっかり凶です"}

        oldlots = lots
        lots = lots2
        lots2 = kansu(3)

        If lots2 = oldlots Then 'もし今回と前々回の結果が同じなら以下を繰り返す

            Do Until lots2 <> oldlots
                lots2 = kansu(3)
            Loop
        End If



        Select Case lots2

            Case 0


                Label1.Text = omikuzi(lots2)

            Case 1



                Label1.Text = omikuzi(lots2)
            Case 2

                Label1.Text = omikuzi(lots2)
        End Select

        

    End Sub
    Function kansu(ByVal i As Integer) As Integer
        Dim myrandom = New Random()
        Return myrandom.Next(i)
    End Function
End Class

編集 削除
まさる  2009-07-04 08:58:22  No: 146016  IP: 192.*.*.*

>フローチャートを紙に書いて考えてみましたか?
何度も書いて到達したのが上記のコードです。ふーう(^^;)
意図した動きをしているので問題はないと思っているのですが
やはり何かちがうのでしょうか?

もう降参したい気持ちなので
模範のサンプルおしえていただけたら気が楽になりそうです。

もしかしたら私には才能、適性がないのかも
卑下しているわけではありませんが、得て不得手はありますよね。
頭の回転も鈍ってます

編集 削除
しんご  2009-07-04 12:21:50  No: 146017  IP: 192.*.*.*

あ、私も勘違いしていました。

>同じものが3回以上続けてでないようにしたい

は、連続して3回ではなく、とにかく3回でないような
プログラムでいいってことなんですか?

それでしたら、まさるさんが最後に投稿された
プログラムでも仕様を満たすことになります。

ただし、例えば

1回目:大吉
2回目:吉

だった場合、3回目は大吉は絶対に出ないことになります。
(前々回と今回を比較しているため)

たしかに3回連続で出ることはありませんが、
出てもいい結果(例でいうと3回目の大吉)を省くというのは
いささか問題あると思いますが、いかがでしょうか?
「これでも構わない」となればそれまでですが・・・


> もう降参したい気持ちなので
> 模範のサンプルおしえていただけたら気が楽になりそうです。

この言葉は、質問の回答者に対して失礼です。
ヒントを与えている方々がいらっしゃるのに
「降参」とはいかがなものかと思います。

重要なのは、プログラムを書くことではなく、
フローチャートを書いてみて、どこでどういった条件が
必要か、自分で考えることなのです。
考えることが苦しいとなれば、今後も苦しむだけでしょう。


ちなみに私なら下記の様にプログラミングします。
3回連続して同じ結果がでないようになっております。
大吉→吉→大吉という結果も出ます。
ポイントはラベルに結果を表示した後にアレコレと処理することですね。

もう少し改良すれば、oldlotsを使わなくてもできます。
ちょっと難しいですが、ご自身で考えてみてください。


Public Class おみくじ

  Const max As Integer = 3
  Const daikiti As Integer = 0
  Const kiti As Integer = 1
  Const kyou As Integer = 2

  Dim omikuzi() As String
  Dim oldlots As Integer = -1 ' 前回の結果
  Dim lots As Integer = -1    ' 今回の結果
  Dim Kinshi As Integer = -1  ' 3回目に出さない結果

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    omikuzi = New String() {"やりました。大吉です", "まあまあ、吉です", "がっかり凶です"}

    lots = kansu(max)
    If lots = Kinshi Then
      Do
        lots = kansu(max)
      Loop Until lots <> Kinshi
    End If

    Label1.Text = omikuzi(lots)

    If oldlots = lots Then
      Kinshi = lots
    Else
      Kinshi = -1
    End If

    oldlots = lots

  End Sub

  Function kansu(ByVal i As Integer) As Integer

    Dim mrandom = New Random()
    Return mrandom.Next(i)

  End Function

End Class

編集 削除
特攻隊長まるるう  2009-07-04 14:53:09  No: 146018  IP: 192.*.*.*

> 意図した動きをしているので問題はないと思っているのですが
> やはり何かちがうのでしょうか?
パターンテストしたら平均で50%くらいはバグを含む結果と出ました。

    Dim omikuzi() As String = New String() {"○", "△", "×"}
    Dim oldlots As Integer = -1 '前々回の結果
    Dim lots As Integer = -1 '前回の結果

    Dim lots2 As Integer '今回の結果
    ''--------------------------------------------------------------------------
    Const max As Integer = 3
    Dim Kinshi As Integer = -1  ' 3回目に出さない結果
    ''--------------------------------------------------------------------------
    Private m_Target As String = String.Empty
    Private m_Double As Boolean = False
    ''--------------------------------------------------------------------------

    Private Enum PG
        masaru
        singo
        maruru
    End Enum
    Private m_TestPG As PG = PG.masaru '誰のプログラムをテストするか。
    Private m_AllOutput As Boolean = False '全てのおみくじ結果を表示するか。
    Private m_TestRowCount As Integer
    Private m_TestColCount As Integer
    Private m_BeforeTestRowCount As Integer
    Private m_BeforeTestColCount As Integer
    Private m_omikuziAll As String
    Private m_TestPattern As Integer(,) = New Integer(,) {{0, 0, 0} _
                                                        , {0, 0, 1} _
                                                        , {0, 0, 2} _
                                                        , {0, 1, 0} _
                                                        , {0, 1, 1} _
                                                        , {0, 1, 2} _
                                                        , {0, 2, 0} _
                                                        , {0, 2, 1} _
                                                        , {0, 2, 2} _
                                                        , {1, 0, 0} _
                                                        , {1, 0, 1} _
                                                        , {1, 0, 2} _
                                                        , {1, 1, 0} _
                                                        , {1, 1, 1} _
                                                        , {1, 1, 2} _
                                                        , {1, 2, 0} _
                                                        , {1, 2, 1} _
                                                        , {1, 2, 2} _
                                                        , {2, 0, 0} _
                                                        , {2, 0, 1} _
                                                        , {2, 0, 2} _
                                                        , {2, 1, 0} _
                                                        , {2, 1, 1} _
                                                        , {2, 1, 2} _
                                                        , {2, 2, 0} _
                                                        , {2, 2, 1} _
                                                        , {2, 2, 2} _
                                                        }

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim strExpect As String
        Dim strResult As String
        Dim strOutput As String

        Dim strOmikujiTmp As String
        Dim strTarget As String
        Dim blnDouble As Boolean

        Dim blnTurkey As Boolean

        If m_AllOutput Then
            Debug.WriteLine("期待値  結果    合否    (全ての結果)")
            Debug.WriteLine("--------------------------------------------")
        Else
            Debug.WriteLine("期待値  結果    合否  ")
            Debug.WriteLine("----------------------")
        End If

        m_BeforeTestRowCount = -1
        m_BeforeTestColCount = -1
        For m_TestRowCount = 0 To m_TestPattern.GetLength(0) - 1
            '-- テスト結果用変数の初期化
            strExpect = String.Empty
            strTarget = String.Empty
            blnDouble = False
            blnTurkey = False
            m_omikuziAll = String.Empty

            '-- テスト開始条件を揃える
            oldlots = -1 '前々回の結果
            lots = -1 '前回の結果
            ''--------------------------------------------------------------------------
            oldlots = -1 '前々回の結果
            lots = -1 '前回の結果
            Kinshi = -1
            ''--------------------------------------------------------------------------
            m_Target = String.Empty
            m_Double = False
            ''--------------------------------------------------------------------------

            '-- 判定基準作成
            For col As Integer = 0 To m_TestPattern.GetLength(1) - 1
                strOmikujiTmp = omikuzi(m_TestPattern(m_TestRowCount, col))
                If strTarget = strOmikujiTmp Then
                    If blnDouble Then
                        blnTurkey = True
                    Else
                        blnDouble = True
                    End If
                Else
                    blnDouble = False
                    strTarget = strOmikujiTmp
                End If
                strExpect &= strOmikujiTmp
            Next
            '-- テスト
            strResult = String.Empty
            For m_TestColCount = 0 To m_TestPattern.GetLength(1) - 1
                'If m_TestRowCount = 19 - 1 AndAlso m_TestColCount = 1 - 1 Then
                '    Debug.WriteLine("Break Point")
                'End If
                Call Button1_Click(Nothing, Nothing)
                strResult &= Me.Label1.Text
            Next
            strOutput = strExpect & "  " & strResult & "  "

            '-- テスト結果の判定
            If blnTurkey Then
                If strExpect.Substring(0, 2) = strResult.Substring(0, 2) _
                AndAlso strExpect <> strResult Then
                    strOutput = strOutput & "合格  "
                Else
                    strOutput = strOutput & "不合格"
                End If
            Else
                If strExpect = strResult Then
                    strOutput = strOutput & "合格  "
                Else
                    strOutput = strOutput & "不合格"
                End If
            End If

            If m_AllOutput Then
                strOutput &= "(" & m_omikuziAll & ")"
            End If
            Debug.WriteLine(strOutput)
        Next
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Select Case m_TestPG
            Case PG.masaru
                Call masaruPG()
            Case PG.singo
                Call singoPG()
            Case PG.maruru
                Call maruruPG()
        End Select

    End Sub

    Sub masaruPG()

        'omikuzi = New String() {"○", "△", "×"}

        oldlots = lots
        lots = lots2
        lots2 = kansu(3)

        If lots2 = oldlots Then 'もし今回と前々回の結果が同じなら以下を繰り返す
            Do Until lots2 <> oldlots
                lots2 = kansu(3)
            Loop
        End If

        Select Case lots2
            Case 0
                Label1.Text = omikuzi(lots2)
            Case 1
                Label1.Text = omikuzi(lots2)
            Case 2
                Label1.Text = omikuzi(lots2)
        End Select

    End Sub

    Sub singoPG()

        'omikuzi = New String() {"やりました。大吉です", "まあまあ、吉です", "がっかり凶です"}

        lots = kansu(max)
        If lots = Kinshi Then
            Do
                lots = kansu(max)
            Loop Until lots <> Kinshi
        End If

        Label1.Text = omikuzi(lots)

        If oldlots = lots Then
            Kinshi = lots
        Else
            Kinshi = -1
        End If

        oldlots = lots

    End Sub

    Sub maruruPG()

        Dim strOmikujiTmp As String

        strOmikujiTmp = omikuzi(kansu(3))
        If m_Target = strOmikujiTmp Then
            If m_Double Then
                Do
                    strOmikujiTmp = omikuzi(kansu(3))
                Loop Until m_Target <> strOmikujiTmp
            Else
                m_Double = True
            End If
        Else
            m_Double = False
        End If
        m_Target = strOmikujiTmp
        Label1.Text = strOmikujiTmp

    End Sub


    Function kansu(ByVal i As Integer) As Integer
        Try
            '-- 規定のテストパターン内ならテストパターンを返す
            If m_BeforeTestRowCount <> m_TestRowCount _
            OrElse m_BeforeTestColCount <> m_TestColCount Then
                m_BeforeTestRowCount = m_TestRowCount
                m_BeforeTestColCount = m_TestColCount
                If m_TestRowCount <= m_TestPattern.GetLength(0) - 1 _
                AndAlso m_TestColCount <= m_TestPattern.GetLength(1) - 1 Then
                    Return m_TestPattern(m_TestRowCount, m_TestColCount)
                End If
            End If

            Dim myrandom As Random = New Random()
            Return myrandom.Next(i)

        Catch ex As Exception
            Debug.WriteLine(ex.Message)
        Finally
            '-- 全てのおみくじ結果を記録
            m_omikuziAll &= omikuzi(kansu)
        End Try
    End Function

編集 削除
まさる  2009-07-04 20:40:30  No: 146019  IP: 192.*.*.*

しんごさん、ご指導有り難う。
何とか自力で頑張ってみます。
苦労することがプログラミングの醍醐味であることを
忘れるところでした。

編集 削除
まさる  2009-07-05 20:03:26  No: 146020  IP: 192.*.*.*

特攻隊長まるるうさんへ


お願いしていないのにバグテストしていただき感謝します。
あなたは、IT業界で働かれているのだと思います。
きっとピカ一の実力をお持ちなのでしょう。

しかし、失礼ですが、お客様に対しても同じように、言葉足らずで
愛想のひとかけらもなくテスト結果をさしあげているのでしょうか?
それではIT業界で働くにはいといろと問題があるのでは?と危惧しています

嫌みではありませんが、私が客ならお断りした人材です
最も、ここは掲示板ですから無関係かもしれませんが、あなたの人間性の一端をかいま見る思いで不愉快でした。

大変失礼かつ無礼なことを書きましたが、あなたがIT業界で今後もお勤めに
なられるのならぜひご自身の在り方を顧みられることをお薦めします。

決したあなたを愚弄した書き込みではないことはわかっていただきたい。

編集 削除
ごろう  2009-07-05 20:47:15  No: 146021  IP: 192.*.*.*

たぶんこれを見ているひとの多くが

>最も、ここは掲示板ですから無関係かもしれませんが、
>あなたの人間性の一端をかいま見る思いで不愉快でした。

という感情をあなた(まさるさん)に持つでしょうね。
そのことはわかっていますか?  >まさるさん

>プログラミングの醍醐味

プログラムは基本的に常に未完成です。
俗に言うバグを含んでいます。
それを最初から最後まで一人のプログラマが担当したばあいは
通常とは桁違いに存在すると思います。
現在は「初心者」の段階でデバッグすらまともにできていない
ようですので「テスト工程」などという概念すらないと思いま
すが、普通は全工程の半分くらいのパワーをテストに費やします。

それを変わりにやってもらったのですから感謝こそすれ
「不愉快でした。」
などという言葉を直接返すべきではありません。

この書き込みに対しても「不愉快でした。」という言葉を
いただけそうですが、もう少し広い目で社会を見つめてください。

編集 削除
まさる  2009-07-05 21:01:04  No: 146022  IP: 192.*.*.*

>それを変わりにやってもらったのですから感謝こそすれ
>「不愉快でした。」
誤解なさらないでください。
私が不愉快に思っていることは、もう少し言葉を添えていただきたかったと思っただけです。(常識の範囲で)
おわかりになるでしょうか?最も基本的な人と人のコミュニケーションです。その部分が彼には欠けているように感じたのです。
(これは決して馬鹿にしてはおりません。そういう個性をお持ちの方もいることは私は経験上知ってます)
その性格が誤解を招いて彼の仕事に悪影響を及ぼしていないかということを危惧して申し上げただけです。

編集 削除
特攻隊長まるるう  2009-07-05 21:24:29  No: 146023  IP: 192.*.*.*

性格悪くても実力があると重宝される世界なんだよねぇ(^^;

いや、しかし、プログラムコードってその人の頭の中が
もろに出ちゃいますよねww。

あ、そうそう。ボクが無愛想なのは常にじゃあ無いですよ?。
過去ログを検索すれば分かると思いますが、懇切丁寧に教えてる
場合ももちろんあります。理由は言わずもがな。

編集 削除
まさる  2009-07-05 21:34:57  No: 146024  IP: 192.*.*.*

>性格悪くても実力があると重宝される世界なんだよねぇ(^^;
>いや、しかし、プログラムコードってその人の頭の中が
>もろに出ちゃいますよねww。

そのようなことはおっしゃらなかったほうがよかったのではないかと思いますが…誤解されたようで残念です

編集 削除
ごろう  2009-07-05 22:32:28  No: 146025  IP: 192.*.*.*

>あなたの人間性の一端をかいま見る思いで不愉快でした。

そのようなことはおっしゃらなかったほうがよかったのではないかと思います.
今でも上に引用した部分は発言すべきことだった、と思っているんでしょうか?

>その部分が彼には

もう完全に敵視ですね。
感謝の気持ちのかけらもないことがいっそう明らかになってきました。
提供された情報の重要性をわかるだけの力量はないと思いますが、
自分が何を知らないかを把握すべきですよ。

編集 削除
しんご  2009-07-05 22:55:11  No: 146026  IP: 192.*.*.*

質問者は解決したのであれば、
解決にチェックを入れるのがマナーです。
当初の問題は達成されたと思いますが?

少なくとも私のプログラムコードに対する
まさるさんの投稿時点で解決していたはずです。
仕様を満たしていなければご指摘ください。


解決しているのであれば、これ以上、
この掲示板でやり取りするのは意味がありません。

使用上の注意にも
1.それぞれの掲示板の趣旨にあったものをお書き下さい。
とあります。

以下、個人的感想です。
もし私がまさるさんの立場で、特攻隊長まるるうさんが
バグテストされたら感謝すると思います。

「こういうことができるんだ」
「50%か・・・もっと勉強しよう」

と感じているでしょうね。

この掲示板の書き込みを活かすかどうかは人それぞれです。

面と向かって話しているならともかく、
掲示板でのやり取りということを考えると
特攻隊長まるるうさんの書き込みは何ら問題ないと思います。

問題あると感じるのであれば、自分の書き込みが相手に
不快を与えてなかったか、をまず先に考えるべきです。

以上

編集 削除
まさる  2009-07-06 04:25:48  No: 146027  IP: 192.*.*.*

>感謝の気持ちのかけらもないことがいっそう明らかになってきました。
>提供された情報の重要性をわかるだけの力量はないと思いますが、
感謝してほしかったのですか、それは気づきませんで申し訳ないです
ごろうさん、突然登場されましたが、ご苦労さまです
お互いに中傷しあうのは止めましょう。<醜いですから>
お互いの幸せのためにもね。

管理人様これ以上の書き込みはいたしません。自重します。m(_ _)m

編集 削除
ごろう  2009-07-06 07:50:40  No: 146028  IP: 192.*.*.*

結局「逆ギレ」状態で退場ですね。
このほうがあとから見てもはっきりするから都合がいいけど・・・

編集 削除
ゴロー  2009-07-06 10:05:09  No: 146029  IP: 192.*.*.*

>結局「逆ギレ」状態で退場ですね。
>このほうがあとから見てもはっきりするから都合がいいけど・・・

http://madia.world.coocan.jp/cgi/BBSHelpMe.htm
良識のある社会人ならよくお読み下さい
(もっとも高校生のプログラミングオタクではしかたがないかもしれませんが)

編集 削除
まさる  2009-07-06 10:51:50  No: 146030  IP: 192.*.*.*

皆様には大変お世話になりました。ありがとうございました。

解決済みですので、これ以上の書き込みはご遠慮ください

編集 削除
らすと  2009-07-06 14:03:13  No: 146031  IP: 192.*.*.*

ひととおりのプログラムの作り方を体験したら、
次はデバッグ方法の体験が必要ですね。
がんばってください。

編集 削除
まさる  2009-07-06 19:16:38  No: 146032  IP: 192.*.*.*

>ひととおりのプログラムの作り方を体験したら、
>次はデバッグ方法の体験が必要ですね。
>がんばってください。
暖かいお言葉有り難うございます。うれしいかぎりです。

プログラミングに行き詰まっていた自分は冷静さを失っていたことに
ようやく気づきました。

特攻隊長まるるうさんには、適切なアドバイスを頂きながら間違った思いこみで受け取ってしまったこと本当に申し訳なく思っております。ごめんなさい。
また、管理人さんとこちらの掲示板を閲覧されている皆様には不愉快な思いをさせてしまったことに対して深くお詫びします。
社会人として、いや人間として恥ずかしいかぎりです。
一から出直してきたいと思っております。
もちろん簡単に許していただけるとは思っておりません。
自分なりに反省して、これまでの自分の在り方を見つめ直して参りたいと思っております。
このたびは本当に申し訳ございませんでした。

編集 削除