0

我已经编写了下面的代码来计算大于或等于 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 和 120函数时,5的阶乘是 120,但我不知道如何在 VB 的命令中返回值,我只是习惯了 C# 的 .myNumberFactorialChecker()MsgBox

我尝试了代码片段

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

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

4

3 回答 3

6

像这样:

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

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

请注意,在 VB.NET 中,使用MessageBox.Show比旧的 VB6 样式MsgBox函数更可取。此外,在 VB 中,&通常建议使用+运算符而不是用于字符串连接的+运算符,因为当您使用Option Strict Off. 因此,这将是更好的方法:

MessageBox.Show("The Factorial of " & myNumber & " is " & FactorialChecker()) 
于 2014-04-16T20:22:07.000 回答
1

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

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

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

于 2014-04-16T20:45:03.120 回答
1

myNumber在函数内部声明FactorialChecker。如果您尝试在该功能之外访问它,它将不存在。您可能需要使其成为该类的属性。

于 2014-04-16T20:46:22.630 回答