我已经编写了下面的代码来计算大于或等于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#。
我尝试了代码段
MsgBox("The Factorial of + myNumber "is" + FactorialChecker() "")
但是我在visual studio中遇到了语法错误,并且错误地认为我的myNumber
变量未在程序中声明。我该怎么做才能解决这些错误?
答案 0 :(得分: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())
答案 1 :(得分:1)
首次尝试时,将myNumber = Val(FactorialTextBox.Text)
移至按钮单击处理程序。如果每次调用FactorialChecker函数时重新加载它,那么您的递归将无法按照您希望的方式工作。
此外,您没有声明它或指定类型,因此您可能希望将该行更改为Dim myNumber As Double = Val(FactorialTextBox.Text)
。然后在其下方添加MessageBox.Show
电话,正如其他人所说的那样。
Val()
可能不是一个好选择,因为它返回一个Double,而factorial函数仅为非负整数定义。你可能真的希望myNumber
是一个整数(或一个Long,或其他东西,取决于你需要的范围)。然后,您可以将Val()
替换为CInt()
,Integer.Parse
或Integer.TryParse
,并添加错误检查以确保该值为非负数.Integer.TryParse,以及添加错误检查以确保该值为非负值。
答案 2 :(得分:1)
myNumber
在FactorialChecker
函数内声明。如果您尝试在该功能之外访问它,它将不存在。您可能需要将其作为该类的属性。