【问题标题】:Splitting a program into Procedures/Functions将程序拆分为过程/函数
【发布时间】:2014-11-18 21:34:04
【问题描述】:

这是我正在使用的代码。我试图通过将程序拆分为过程和函数来组织程序。代码在未拆分时有效,但是当我采用下面的这种格式时,当前数字变为 0。我是否需要将 UserInput 更改为函数而不是过程?我需要更新多个值并将其返回到主程序,所以我不知道如何将它用作函数。在此先感谢您的帮助,并为我的菜鸟道歉,我总体上仍处于学习编程的早期阶段。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Call ExplanationOfGame()
    CurrentNumber = RandomNumber()
    Label2.Text = CurrentNumber
    While CurrentNumber <> 0
        Call UserInput(UserNumber, CurrentNumber, Answer)
        Call ComputerInput(ComputerNumber, CurrentNumber, Answer)
    End While
    Call DecideWinner(CurrentNumber, Answer)
End Sub

Sub UserInput(ByVal CurrentNumber As Integer, ByVal UserNumber As Integer, ByVal Answer As Integer)
    Answer = 1
    Do
        UserNumber = InputBox("Enter number to minus from the current number (1, 2 or 3). The current number is: " & CurrentNumber)
    Loop Until (CurrentNumber - UserNumber) >= 0
    CurrentNumber = CurrentNumber - UserNumber
    Label2.Text = CurrentNumber
    MsgBox("You took " & UserNumber & " away from the current number. The new current number is " & CurrentNumber)
End Sub

【问题讨论】:

  • 将您的ByVals 更改为ByRefs。

标签: vb.net function procedure


【解决方案1】:

在 UserInput 函数中,使用 ByRef 而不是 ByVal 作为参数。 ByVal 只传入变量的值,因此您实际上并没有修改原始变量。

另一种选择是将其更改为函数并仅返回 CurrentValue。您似乎传递了两个不需要传递的参数 - UserNumber 和 Answer。

你可以改成:

Function UserInput(CurrentNumber As Integer) As Integer
    ...
End Function

然后调用它:

CurrentNumber = UserInput(CurrentNumber)

【讨论】:

  • 好的,那我可以把 sub 改成函数吗?可能是这样的?:'Function UserInput(ByRef CurrentNumber, ByRef UserNumber, ByRef Answer)'
  • 不,它可以保留一个子。如果要返回单个值而不是更改现有变量,则仅更改为函数。
  • 我将所有 'ByVal' 更改为 'ByRef' 但问题仍然存在?
  • 你遇到了什么问题?您是否在代码中放置断点以单步执行并查看您期望的值是否正在传递?
  • 对不起,我不太确定该怎么做,在我尝试将其拆分为 subs 之前,代码确实有效,所以我认为这是问题所在。 CurrentNumber 是 Label2.text 中表示的随机数,它可以工作,但是在出现的输入框中,currentNumber 为 0。有没有办法我可以将完整代码发送给您,以便您可以看到我的错误?跨度>
猜你喜欢
  • 2017-08-28
  • 1970-01-01
  • 2019-09-28
  • 1970-01-01
  • 2022-12-29
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
相关资源
最近更新 更多