2012-06-14 44 views
0

我只是将所有的代码放在这里,以防在“SelectName()”子文件中出现一段代码时出现错误。为什么我只能从此代码获得一个输出值(并且没有调试输出)?

Module Module1 
    Dim selectednames As String = "" 
    Dim index As Short = 0 
    Dim inarray As Boolean = False 
    Dim amountofkeys As Short 
    Dim namesarray() As String 
    Dim names As String = "" 
    Dim input As String = "" 
    Dim totalnames As Short = 0 
    Dim indexofcomma As Short = 0 

    Sub Main() 
     Console.Write("Howmany keys are there to be given away? ") 
     amountOfKeys = CShort(Console.ReadLine()) 
     Start() 
     While Not amountofkeys = -1 
      SelectName(names, totalnames) 
      amountofkeys = amountofkeys - 1 
     End While 
     Console.Write("The winners are: " & selectednames) 
     Console.ReadLine() 
    End Sub 

    Sub SelectName(ByVal names As String, ByVal totalnames As Short) 
     ReDim namesarray(totalnames - 1) 
     If inarray = False Then 
      For x = 0 To totalnames - 1 
       indexofcomma = InStr(names, ",") 
       namesarray(x) = Left(names, indexofcomma - 1) 
       names = Mid(names, indexofcomma + 1, (Len(names))) 
      Next 
      inarray = True 
     End If 
     Randomize() 
     index = Int(Rnd() * (totalnames - 1)) 
     For x = 0 To totalnames - 1 
      Debug.Print("namesarray(" & x & ") = " & namesarray(x)) 
     Next 
     selectednames &= namesarray(index) & " " 
     movenames() 
    End Sub 

    Sub movenames() 
     For x = index To totalnames - 1 
      namesarray(index) = namesarray(index + 1) 
     Next 
     totalnames -= 1 
    End Sub 

    Sub Start() 
     Console.WriteLine("Enter all the viewer's names, one by one.") 
     Console.WriteLine("Once all names have been entered, press 0.") 
     input = Console.ReadLine() 
     While Not input = "0" 
      names &= input & "," 
      totalnames += 1 
      input = Console.ReadLine() 
     End While 
    End Sub 
End Module 

这里是做什么的图像(我想你可以看到什么地方出了错)

13个输入,3路输出预计,仅1个输出给出。 Wrong output

你们有没有机会帮我找出问题所在?

从我到目前为止所了解到的,它正在执行正确数量的循环等等。只要它开始为第二个游戏键生成“赢家”,它就不会从字符串中获取字符串值namesarray。

另外,为什么是

For x = 0 To totalnames - 1 
      Debug.Print("namesarray(" & x & ") = " & namesarray(x)) 
     Next 

不给我一个调试输出?

+1

(有点偏离主题)是否有一个特定的原因,你为什么要在一个由逗号分隔的字符串中存储一个名称集合?难道它不会简化事物来创建'Dim Names As New List(Of String)'? - 我正在审视这个实际的问题,但我不得不提到这一点。 – hometoast

+0

嗯,我还在学习,这就是为什么我总是很欣赏那些超越问题寻找的人帮助我改进我的代码:)所以,感谢您指出了这一点^^ – Yorrick

+1

PS:离题我的屁股,用一个替换阵列列表(的字符串)修复了所有xD谢谢兄弟:) 好吧,除了Debug.print – Yorrick

回答

1

简化您的问题。

使名称成为List(Of String),而不是将“,name”添加到字符串中,请使用names.Add(namereadfromconsole)。除了通过名称字符串循环外,简单的names.Contains(thename)可以代替您使用的inArray标志。而不是拨打movenames(),简单的names.Remove(nametoremove)。至于Debug.Print()调用不显示任何内容,请尝试检查,在选项 - >调试 - >常规 - > [x]将所有输出窗口文本重定向到立即窗口。

1

主要错误在于这里

For x = index To totalnames - 1 
     namesarray(index) = namesarray(index + 1) 
    Next 

我认为你应该以这种方式

For x = index To totalnames - 1 
     namesarray(x) = namesarray(x + 1) 
    Next 

做,记住,随机指标会导致你的代码崩溃,如果这将是平等的到namesarray中的最大值。 (例如:totalnames=6index = Int(Rnd() * (totalnames - 1))结果在索引= 5,则movenames崩溃)

的Debug.Print输出变为即时窗口或输出窗口,而不是由代码打开控制台窗口。使用Console.Writeline。

相关问题