Vb.net 如何将字符串添加到数组x2中,然后将其取回?

Vb.net 如何将字符串添加到数组x2中,然后将其取回?,vb.net,Vb.net,基本上,我要做的是编写一个程序,在其中输入人的姓名和出生日期,将其存储到一个数组中(请注意,如果我必须执行两个单独的数组,请确保),然后通过在另一个文本框中输入他们的姓名并单击另一个按钮,我可以返回出生日期 我知道我必须包含如果循环,我知道如何声明数组 我猜我可能需要选择一个案例 代码如下: Public Class Form1 Dim Name(5) As String Dim DOB(5) As String Dim i As Integer Private Sub btnNameEnter

基本上,我要做的是编写一个程序,在其中输入人的姓名和出生日期,将其存储到一个数组中(请注意,如果我必须执行两个单独的数组,请确保),然后通过在另一个文本框中输入他们的姓名并单击另一个按钮,我可以返回出生日期

我知道我必须包含
如果
循环,我知道如何声明数组

我猜我可能需要选择一个案例

代码如下:

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出于某种原因不断删除它,不允许我重新添加按钮

以下是错误列表的图像: )


公开课表格1 作为字符串的Dim DOB(5) 作为整数的Dim i Private Sub btenter_Click(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理btenter。单击 Dim名称(5)作为字符串

    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
末级


这里有一个错误:-当我尝试输入第二个数字时,会发生这种错误。使用错误图片而不是代码中的注释来指示错误的位置和文本,很难精确,但从我所看到的:

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

    myNames(curPosition)=txtInputName.Text

  • 关系错误源于此:
    大小写为Name(1)

错误告诉您它需要一个关系运算符,而
is
不是(
is
用于对象,而不是字符串)。这里的代码也有点不稳定,因为如果
i
,您无法控制值。要比较
txtInputName

Select Case txtInputName.Text   
    Case = Name(1)       ' ie does txtInputName match the value in Name(1)?
      ... 
-您可以在这里使用For循环,而不是case语句,以获得更少的代码


让我们学习关于课堂的知识。类将把数据保存在一起,而不是将相关信息片段彼此分离的数组

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
接下来,一个漂亮的列表来保存一些person对象。列表类似于数组,但更智能:

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 
找到一个人:

' 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 
试试这个:

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

我不知道该怎么办,我班上的人只使用了if语句和select case。if语句和select case会起作用,只是不是你使用它们的方式。作为家庭作业,如果你还没有学习过,那么上课和列清单可能不是一个好主意。从第一部分(名称、i、Is)中提到的更改开始,并记住编程是一项精度练习;警告意味着我不知道怎么写,但我不知道他们怎么做,几乎没有任何代码和工作,我不能声明名称,因为一些1D数组B。嗯,抱怨它肯定会有帮助。我告诉过您可能存在的问题:表单已经有Name属性,所以请对数组使用
myNames
。我不能确定,因为我们不知道哪一行代码与该错误相关-您需要更清楚地描述问题。点击错误,它会把你带到行,你可以在你的帖子中标记它,让我们知道是什么,我重写了代码,仍然不起作用。我还将包括一些错误的图像。(我会把它作为答案发布)