【问题标题】:How Do I pass the result of a variable in this vb app?如何在这个 vb 应用程序中传递变量的结果?
【发布时间】:2014-04-16 20:20:59
【问题描述】:

我已经编写了下面的代码来计算大于或等于 1 的数字的阶乘。

Public Class FactorialApp

    Private Function FactorialChecker(myNumber As Integer)
        myNumber = Val(FactorialTextBox.Text)
        If myNumber < 1 Then
            FactorialChecker = 1

        Else
            FactorialChecker = myNumber * FactorialChecker(myNumber - 1)
        End If
    End Function

    Public Sub ResultButton_Click(sender As Object, e As EventArgs) Handles ResultButton.Click

    End Sub

End Class

我想在 button_click 事件中显示类似 5 的阶乘是 120 的消息框,单击时 5 应该是 myNumber 和 120 FactorialChecker()函数,但我不知道如何在 VB 的 MsgBox 命令中返回值,我只习惯于 C# 的 .

我试过代码 sn-p

    MsgBox("The Factorial of  + myNumber "is" + FactorialChecker() "") 

但我被 Visual Studio 中的语法错误以及我的 myNumber 变量未在程序中声明的错误所困扰。请问我该怎么做才能修复这些错误?

【问题讨论】:

  • 我假设 sn-p 中缺少的引号和 + 符号只是拼写错误?

标签: vb.net msgbox


【解决方案1】:

像这样:

MsgBox("The Factorial of " + myNumber + " is " + FactorialChecker()) 

您只是没有关闭字符串第一部分的引号,因此它们不平衡,因此您的编译器错误。另外,我添加了一些空格,因为我假设您会想要它们。

请注意,在 VB.NET 中,使用 MessageBox.Show 优于旧的 VB6 样式的 MsgBox 函数。此外,在 VB 中,对于字符串连接,通常建议使用 &amp; 运算符而不是 + 运算符,因为当您使用 Option Strict Off 时,+ 运算符可能会产生一些意想不到的结果。所以,这将是更好的方法:

MessageBox.Show("The Factorial of " & myNumber & " is " & FactorialChecker()) 

【讨论】:

  • +1 用于编辑提及&amp; 而不是+ 用于字符串连接。
  • 哇,非常感谢您的提示。还有一个问题,我不断收到错误 myNumber is not declared。由于其保护级别,它可能无法访问。 在 Visual Studio 中。
  • @FeyisayoSonubi 我相信错误是说myNumber 在您尝试使用它的范围内不存在。最有可能的是,myNumber 的范围在 FactorialChecker() 函数内,但您在此之外使用它。因此,请确保在这行代码之前声明变量并将其设置为某个值。另外,我认为您将把它传递给FactorialChecker 函数。
【解决方案2】:

myNumberFactorialChecker 函数中声明。如果您尝试在该功能之外访问它,它将不存在。您可能需要将其设为类的属性。

【讨论】:

    【解决方案3】:

    第一次尝试时,将myNumber = Val(FactorialTextBox.Text) 移动到您的按钮单击处理程序中。如果每次调用 FactorialChecker 函数时都重新加载它,那么您的递归将不会按照您希望的方式工作。

    另外,您没有声明它或指定类型,因此您可能希望将该行更改为Dim myNumber As Double = Val(FactorialTextBox.Text)。然后在其下方添加MessageBox.Show 调用,正如其他人所说的那样。

    Val() 可能不是一个好的选择,因为它返回一个 Double,并且阶乘函数仅针对非负整数定义。您可能实际上希望 myNumber 成为整数(或长整数,或其他内容,具体取决于您需要的范围)。然后,您可以将Val() 替换为CInt()Integer.ParseInteger.TryParse,并添加错误检查以确保该值是非负的.Integer.TryParse,并添加错误检查以确保该值是非负数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 2020-05-01
      • 2020-11-11
      相关资源
      最近更新 更多