VB控制台变量名称循环连接

时间:2015-09-24 19:34:28

标签: arrays vb.net console concatenation variable-assignment

我是大学视觉基础的新手,我使用的是基于控制台的纯软件版本。我已经设置了一个任务,在不使用数组的情况下,允许用户输入5个学生姓名及其各自的测试分数,并使用循环将它们存储在10个单独的变量中。然后,程序必须输出最高的测试分数和分配给它的学生。

我知道我必须为此使用for循环,并且一直尝试使用变量名连接i(假设i = 1到5),然后使用console.readline将变量赋值给一个值。到目前为止,这一直无济于事,我不知道该怎么办。任何帮助表示赞赏。

谢谢,

乔治

2 个答案:

答案 0 :(得分:0)

  

不使用数组

这很奇怪。我认为这也意味着任何收藏。

  

一直试图用变量名连接i(假设i = 1到5)。

确实没有一种好的方法可以做到这一点,而不是没有某种代码生成。你可以使用字段和反射,但这很可能超出范围。

最简单的方法就是在循环变量上使用If,并根据i指定正确的变量。

Dim name1 As String, name2 As String, name3 As String, name4 As String, name5 As String
Dim score1 As Integer, score2 As Integer, score3 As Integer, score4 As Integer, score5 As Integer
For i As Integer = 1 To 5
    Console.Write("Name: ")
    Dim name = Console.ReadLine()
    Console.Write("Score: ")
    'TODO: Error checking
    Dim score = Int32.Parse(Console.ReadLine())
    If i = 1 Then
        name1 = name
        score1 = score
    ElseIf i = 2 Then
        name2 = name
        score2 = score
    End If
    'Etc
Next
'Calculate check the variables for the highest score

这很粗糙,但符合标准。如果允许DictionaryList,则会使事情变得更简单:

Dim people As New Dictionary(Of String, Integer)
For i As Integer = 1 To 5
    Console.Write("Name: ")
    Dim name = Console.ReadLine()
    Console.Write("Score: ")
    'TODO: Error checking
    Dim score = Int32.Parse(Console.ReadLine())
    people.Add(name, score)
Next
'Calculate the highest score on the dictionary

答案 1 :(得分:0)

如果要求您必须使用五个单独的变量,因为不允许使用任何类型的可枚举列表,那么我建议创建两个允许您通过索引获取和设置值的方法:

Private _name0 As String
Private _name1 As String
Private _name2 As String
Private _name3 As String
Private _name4 As String

Private Function GetName(index As Integer) As String
    Select Case index
        Case 0
            Return _name0
        Case 1
            Return _name1
        Case 2
            Return _name2
        Case 3
            Return _name3
        Case 4
            Return _name4
    End Select
    Throw New ArgumentOutOfRangeException()
End Function


Private Sub SetName(index As Integer, name As String)
    Select Case index
        Case 0
            _name0 = name
        Case 1
            _name1 = name
        Case 2
            _name2 = name
        Case 3
            _name3 = name
        Case 4
            _name4 = name
    End Select
    Throw New ArgumentOutOfRangeException()
End Sub

然后你可以为分数做同样的事情。由于.NET不是动态类型语言,因此它不容易通过动态构建的字符串名称来支持访问变量。虽然通过 Reflection 完成类似的工作在技术上是可行的,但我怀疑这是练习的目的。