如何将字符串添加到数组x2并将其取回?

时间:2014-10-15 17:37:26

标签: vb.net

基本上我要做的是写一个程序,你输入这个人的名字和出生日期,把它们存放到一个数组中(注意我是否必须做两个独立的数组),然后输入他们的名字到另一个文本框,然后点击另一个按钮,我可以获得出生日期。

我知道我必须包含 if -loop,我知道如何声明数组。

我猜我可能需要使用精选案例。

以下是代码:

Public Class Form1
Dim Name(5) As String
Dim DOB(5) As String
Dim i As Integer
Private Sub btnNameEnter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNameEnter.Click

    Name(i) = txtInputName.Text
    DOB(i) = txtInputDOB.Text

    If i = 6 Then
        MsgBox("You cannot enter any more names.")
    End If

    For i = 1 To 5
        Name(i) = i
        txtInputName.Clear()
        txtInputDOB.Clear()
    Next i

End Sub

Private Sub btnFindDOB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFindDOB.Click
    Select Case Name(i)
        Case Is Name(1)
            MsgBox("Date of birth: " & DOB(1))
        Case is Name(2)
            MsgBox("Date of birth: " & DOB(2))
        Case is Name(3)
            MsgBox("Date of birth: " & DOB(3))
        Case is Name(4)
            MsgBox("Date of birth: " & DOB(4))
        Case is Name(5)
            MsgBox("Date of birth: " & DOB(5))

    End Select
End Sub
End Class

我会显示该程序的图片,但visual basic因某些原因不断删除它,并且不允许我重新添加按钮。

以下是错误列表的图片: http://gyazo.com/2489a307f4a8e2d9ce65aa2ad79b04f1 ScreenShot-error-list


Public Class Form1     Dim DOB(5)As String     Dim i As Integer     Private Sub btnEnter_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)处理btnEnter.Click         Dim Name(5)As String

    Dim Counter As Integer
    txtNameInp.Text = Name(i)
    txtDOBInput.Text = DOB(i)

    Counter = 0

    For i = 1 To 5
        If Counter = 6 Then
            MsgBox("You can only enter 5 names and DOBs")
        End If
        Name(i) = txtNameInp.Text
        DOB(i) = txtDOBInput.Text
        Counter = Counter + 1
    Next i
End Sub

Private Sub btnFindDOB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFindDOB.Click
    Select Case Name(i)
        Case Name(1)
            MsgBox(DOB(1))
        Case Name(2)
            MsgBox(DOB(2))
        Case Name(3)
            MsgBox(DOB(3))
        Case Name(4)
            MsgBox(DOB(4))
        Case Name(5)
            MsgBox(DOB(5))
    End Select
End Sub

结束班

这是一个错误:http://gyazo.com/487290c3e523003fe58f82a15fdf6faa - 当我尝试输入第二个数字时会出现这个错误

2 个答案:

答案 0 :(得分:2)

很难精确地使用错误图片而不是代码中的注释来指示错误的位置和文本,但是我可以看到:

  • 表单已经有Name属性,您尝试通过阵列重新定义它。请使用类似myNames的内容。
  • 您有一个名为i的模块级变量和一个本地变量。将全局变更为有用的内容,例如curPosition。这将跟踪您当前存储的元素。
  • 如果要在6处停止添加数组,则需要在代码中执行此操作。在MsgBox之后添加Exit Sub;你希望在之前将任何内容存储到数组中,而不是之后。也许添加一条消息说 - '现在我会告诉你DOB的名字'。
  • 如果您想要聪明(怀疑),请在表单上同时使用“猜名称”和Guess DOB按钮,并报告给定DOB的名称。它的代码基本相同。
  • 按钮输入代码将在每次单击时运行,因此您不需要循环。顺便说一句,这简直是胡说八道:Name(i) = i你用i恰好是什么来覆盖一切。只需使用myNames作为索引添加到myDOBcurPosition,然后将其递增:

    myNames(curPosition)= txtInputName.Text

  • 关系错误来自:Case Is Name(1)

错误是告诉你需要一个关系运算符,Is不是(Is与Objects一起使用,而字符串不是)。这里的代码也有点不稳定因为你没有控制i的值。比较txtInputName

Select Case txtInputName.Text   
    Case = Name(1)       ' ie does txtInputName match the value in Name(1)?
      ... 

- 您可以在此处使用For循环代替案例陈述,而不是案例陈述。


让我们了解课程。而不是将相关信息彼此分离的数组,而不是一个类将数据保持在一起。

Public Class Person

    Public property Name As String
    Public Property DOB As DateTime       ' I refuse to store a Date as string

    Public Sub New(sName as String, dt as DateTime)
       Name = sName
       DOB = dt
    End Sub
End Class

接下来,一个漂亮的列表来保存一些人物对象。列表就像一个数组,但更聪明:

Private pList As New List(Of Person)

添加一个人:

' ToDo: check that the date is valid using TryParse instead
' this exercise is left to the student
Dim p As New Person(txtInputName.Text, Datetime.Parse(txtInputDOB.Text))
plist.Add(p)

找人:

' case insensitive search
Dim search As String = txtNameToFind.Text.ToLowerInvariant

For Each p as Person In pList
    If P.Name.TolowerInvariant = search Then
        txtDOB.Text = p.DOB.ToString
        Exit For
    End If
Next 

答案 1 :(得分:0)

试试这个:

Public Class Form1
    Dim Name, DOB As List(Of String) 'Lists are better in this situation.

    Private Sub btnNameEnter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNameEnter.Click
        'You don't need to specify the index in lists.
        Name.Add(txtInputName.Text)
        DOB.Add(txtInputDOB.Text)

        txtInputName.Clear()
        txtInputDOB.Clear()
    End Sub

    Private Sub btnFindDOB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFindDOB.Click
        'You get the index of the name you are searching for and get DOB for this index.
        MsgBox("Date of birth: " & DOB.Item(Name.IndexOf(txtInputName.Text)))
    End Sub
End Class