1

テキスト ボックス内の名前をランダムな回数シフトするプログラムを考え出さなければなりません。名前がランダムな回数シフトするところまですべてを取得しました。一度だけシフトしますが、[OK] をクリックすると、名前がシフトする回数だけメッセージボックスがコードに表示されます。名前シフトでループが機能しない理由を知っている人はいますか。メッセージボックスでループを制御する必要があるのではないかと考えていましたが、無限に検索しましたが、それがどのように行われるかを見つけることができません。他のサイトへの提案や紹介はありがたいです。私のコードは以下です。

パブリック クラス Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim RandomNumber As Integer
    Dim min, max As Integer
    Dim temp, temp2, temp3, temp4, temp5, temp6 As String
    Dim i As Integer

    min = 3
    max = 11

    Randomize()
    RandomNumber = Int((max - min + 1) * Rnd() + min)

    temp = n1.Text
    temp2 = n2.Text
    temp3 = n3.Text
    temp4 = n4.Text
    temp5 = n5.Text
    temp6 = n6.Text

    For i = 0 To RandomNumber - 1
        n1.Text = temp6
        n2.Text = temp
        n3.Text = temp2
        n4.Text = temp3
        n5.Text = temp4
        n6.Text = temp5
        MessageBox.Show("Shift " & i & " of " & RandomNumber & " complete")
    Next

End Sub

クラス終了

4

3 に答える 3

2

一時変数もループ内にある必要があると考えてください

For i = 0 To RandomNumber - 1

temp = n1.Text
temp2 = n2.Text
temp3 = n3.Text
temp4 = n4.Text
temp5 = n5.Text
temp6 = n6.Text  

    n1.Text = temp6
    n2.Text = temp
    n3.Text = temp2
    n4.Text = temp3
    n5.Text = temp4
    n6.Text = temp5
    //MessageBox.Show("Shift " & i & " of " & RandomNumber & " complete")
Next

アップデート

1つの一時変数を使用して、この方法で行うこともできます

For i = 0 To RandomNumber - 1

  temp = n6.Text

  n6.Text = n5.Text
  n5.Text = n4.Text
  n4.Text = n3.Text
  n3.Text = n2.Text
  n2.Text = n1.Text
  n1.Text = temp

Next
于 2012-11-12T22:55:53.093 に答える
0

MessageBox の前後に次の行を追加します。

Application.DoEvents
于 2012-11-12T22:56:52.493 に答える
0

コーディングビズが提案したように、一時変数の割り当てをループ内に配置すると機能しますが、ループはまったく必要ありません。文字列を配列に入れると、それらの位置を計算できます。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim RandomNumber As Integer
  Dim min, max As Integer
  Dim temp As New String(5)

  min = 3
  max = 11

  Randomize()
  RandomNumber = Int((max - min + 1) * Rnd() + min)

  temp(0) = n1.Text
  temp(1) = n2.Text
  temp(2) = n3.Text
  temp(3) = n4.Text
  temp(4) = n5.Text
  temp(5) = n6.Text

  n1.Text = temp((0 + RandomNumber) Mod 6)
  n2.Text = temp((1 + RandomNumber) Mod 6)
  n3.Text = temp((2 + RandomNumber) Mod 6)
  n4.Text = temp((3 + RandomNumber) Mod 6)
  n5.Text = temp((4 + RandomNumber) Mod 6)
  n6.Text = temp((5 + RandomNumber) Mod 6)

End Sub
于 2012-11-12T23:01:01.070 に答える