2015-01-05 4 views
-1

제목이 정확히 필요한 경우 잘 모르겠습니다. 설명해 드리겠습니다.vb.net에서 임의의 문자열 배열을 만드는 방법

내가하고있는 일은 미국 국가 (레이블에 무작위로)를 나열하고 레이블 아래에있는 "단순한"게임을 만드는 것입니다. 5 버튼은 텍스트를 버튼으로 임의로 변경하려고합니다. State Capital (모든 수도는 정확한 것을 제외하고 무작위이어야한다) 운이없는 조사 시간 이후로 나는 이것으로 도움을 얻으려는 유일한 사람이 아닌 것 같다. 도움이된다면 도움이 될 것입니다.

Private Class Players 
    Public Team As String 
    Public Name As String 
    Public Sub New(ByVal Team As String, ByVal Name As String) 
     Me.Team = Team 
     Me.Name = Name 
    End Sub 
End Class 

' Arraylist 
Dim lstCapitals As New ArrayList 

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

    Dim list As New List(Of Players) 

    ' Capital Names 
    lstCapitals.Add("Montgomery") 
    lstCapitals.Add("Juneau") 
    lstCapitals.Add("Phoenix") 
    lstCapitals.Add("Little Rock") 
    lstCapitals.Add("Sacramento") 
    lstCapitals.Add("Denver") 
    lstCapitals.Add("Hartford") 

    ' Random number generator 
    Dim randomInt As New Random 

    ' Pulls a name randomly from the list 
    Dim stringname As String = lstCapitals.Item(randomInt.Next(0, 6)) 
    '6 = lstCapitals.Count/one line up 

    ' Show the name 
    'stateNamelbl.Show() 
    'NOT SURE IF I NEEDED THIS OR NOT THATS WHY ITS COMMENTED OUT 
    'Dim RandomList = From RndList In (From xitem In list Select xitem Group By xitem.Team Into First()) _ 
    '  Select RndList _ 
    '  Order By Rnd() 

    For Each item In lstCapitals 
     Randomize() 
     MsgBox(item.Team) 
    Next 

End Sub 
+0

죄송합니다. 제 코드는별로 효과가 없습니다. 난 겨우 몇 주 동안 VB에서 일 해왔다. –

답변

2

샘플 코드에 미국 국가를 선택하는 방법이 설명되어 있지 않으므로 어딘가에 값이 있다고 가정합니다. 다음은 국가 수도의 값을 포함하는 임의의 문자열 배열을 생성하는 데 사용할 수있는 간단한 방법은 다음과 같습니다

Dim sCorrectStateCapital As String = "Denver" ' This is hardcoded to "Denver" assuming that "Colorado" was the current US State you are playing the game for - you need to come up with your own logic to figure out how this works as I have no idea how you are choosing the State 
Dim nButtonCount As Integer = 5 ' This is hardcoded to five since you have five buttons 
Dim sCapitalsArray(nButtonCount - 1) As String ' Create the string array to hold the chosen capitals 

' Loop five times and choose a different state capital each time 

For i As Int32 = 0 To sCapitalsArray.Length - 1 
    Dim nTempIndex As Int32 = randomInt.Next(0, lstCapitals.Count - 1) ' Save the index value of the arraylist that we are choosing 
    sCapitalsArray(i) = lstCapitals.Item(nTempIndex) ' Populate the captials array 
    lstCapitals.RemoveAt(nTempIndex) ' Remove the selected capital from the list of possible choices since we do not want to choose it again 
Next 

' Test to see if the capitals array already contains the "correct" value 

If Not sCapitalsArray.Contains(sCorrectStateCapital) Then 
    ' The correct value is not already in the list so we overwrite one of the values in the array at a random index 
    sCapitalsArray(randomInt.Next(0, sCapitalsArray.Count - 1)) = sCorrectStateCapital 
End If 
1
폼 아래에있다

...

3 레이블 : lblState, lblScore, lblAnswer

5 버튼 : btnCapital1, btnCapital2, btnCapital3, btnCapital4, btnCapital5

State Capitals Quizzer

Public Class frmStateCapitalsQuiz 

    Public Class State 

     Public Name As String 
     Public Capital As String 

     Public Sub New(ByVal data As String) 
      Dim values() As String = data.Split(",") 
      Me.Name = values(0) 
      Me.Capital = values(1) 
     End Sub 

     Public Overrides Function ToString() As String 
      Return Me.Capital & ", " & Me.Name 
     End Function 

    End Class 

    Private R As New Random 
    Private Count As Integer 
    Private Correct As Integer 
    Private States As List(Of State) 
    Private CurrentState As State = Nothing 
    Private CurrentStateSet As List(Of State) 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     LoadStateData() 
     GenerateQuestion() 
     lblScore.Text = "Score: " 
     lblAnswer.Text = "" 
    End Sub 

    Private Sub LoadStateData() 
     States = New List(Of State) 
     Dim StateData As String = "Alabama,Montgomery;Alaska,Juneau;Arizona,Phoenix;Arkansas,Little Rock;California,Sacramento;Colorado,Denver;Connecticut,Hartford;Delaware,Dover;Florida,Tallahassee;Georgia,Atlanta;Hawaii,Honolulu;Idaho,Boise;Illinois,Springfield;Indiana,Indianapolis;Iowa,Des Moines;Kansas,Topeka;Kentucky,Frankfort;Louisiana,Baton Rouge;Maine,Augusta;Maryland,Annapolis;Massachusetts,Boston;Michigan,Lansing;Minnesota,St. Paul;Mississippi,Jackson;Missouri,Jefferson City;Montana,Helena;Nebraska,Lincoln;Nevada,Carson City;New Hampshire,Concord;New Jersey,Trenton;New Mexico,Santa Fe;New York,Albany;North Carolina,Raleigh;North Dakota,Bismarck;Ohio,Columbus;Oklahoma,Oklahoma City;Oregon,Salem;Pennsylvania,Harrisburg;Rhode Island,Providence;South Carolina,Columbia;South Dakota,Pierre;Tennessee,Nashville;Texas,Austin;Utah,Salt Lake City;Vermont,Montpelier;Virginia,Richmond;Washington,Olympia;West Virginia,Charleston;Wisconsin,Madison;Wyoming,Cheyenne" 
     For Each pair As String In StateData.Split(";") 
      States.Add(New State(pair)) 
     Next 
    End Sub 

    Private Sub GenerateQuestion() 
     Dim shuffledStates = States.OrderBy(Function(x) R.NextDouble()).Take(5).ToList 
     CurrentState = shuffledStates(R.Next(shuffledStates.Count)) 
     lblState.Text = CurrentState.Name 
     btnCapital1.Text = shuffledStates(0).Capital 
     btnCapital2.Text = shuffledStates(1).Capital 
     btnCapital3.Text = shuffledStates(2).Capital 
     btnCapital4.Text = shuffledStates(3).Capital 
     btnCapital5.Text = shuffledStates(4).Capital 
    End Sub 

    Private Sub btnCapitals_Click(sender As Object, e As EventArgs) Handles btnCapital1.Click, btnCapital2.Click, btnCapital3.Click, btnCapital4.Click, btnCapital5.Click 
     Dim SelectedCaptial As Button = DirectCast(sender, Button) 

     lblAnswer.Text = CurrentState.ToString 
     Count = Count + 1 
     If SelectedCaptial.Text = CurrentState.Capital Then 
      lblScore.BackColor = Color.Green 
      Correct = Correct + 1 
     Else 
      lblScore.BackColor = Color.Red 
     End If 
     Dim percentCorrect = CInt(CDbl(Correct)/CDbl(Count) * 100) 
     lblScore.Text = String.Format("Score: {0}/{1}, {2}% Correct", Correct, Count, percentCorrect) 

     GenerateQuestion() 
    End Sub 

End Class 
+0

답장을 보내 주셔서 감사합니다. Idle_Mind 작동 방식을 확인하기 위해 새 양식에서 정확한 코드를 사용하려고 시도했지만 56 행에서 오류가 발생합니다. 양식로드시 아무런 문제가 없지만 단추를 클릭하면 오류 메시지가 표시됩니다. lblAnswer.Text = CurrentState.ToString '<- 오류가 CurrentState.ToString을 가리킴 ERROR MSG (개체 참조가 개체의 인스턴스로 설정되지 않음) Count = Count + 1 If SelectedCaptial.Text = CurrentState.Capital Then lblScore.BackColor = Color.Green 맞음 = 정확함 +1 1 Else –

+0

알아 냈습니다. 양식이 정확하지 않습니다. 위대한 작품! 도와 주셔서 감사합니다. –

+0

일단 15 명이되면 당신의 투표를 할 것입니다! 게임을 다시 시작하지 않으면 다시 표시되지 않는 상태를 한 번 표시하는 것이 매우 쉽겠습니까? –

관련 문제