我是vb的初学者,我想知道为什么这段代码不起作用。 我写了这个函数,我似乎无法找到它为什么没有。当我运行程序时,似乎什么都没打印出来。
我应该找到1和输入之间的所有素数
Option Strict On
Public Class Lab4
Dim endCounter As Integer
Dim sum As Integer
Dim msg As String
Dim input As Integer
Public Function isPrime(input As Integer) As Boolean
endCounter = input - 1
For primeCounter As Integer = 1 To endCounter
If input Mod primeCounter <> 0 Then
Return True
Else
Return False
End If
Next
Return False
End Function
Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
Me.Close()
End Sub
Private Sub btnPrime_Click(sender As Object, e As EventArgs) Handles btnPrime.Click
input = Convert.ToInt32(txtNumber.Text)
msg = "The prime numbers are: "
If input < 0 Then
msg = "Number cannot be negative!"
For inputCounter As Integer = 1 To input
If isPrime(inputCounter) = True Then
msg += inputCounter & " "
End If
Next
MsgBox(msg, , "Prime Number")
End Sub
End If
结束班
答案 0 :(得分:2)
此测试将总是在第一次测试时立即返回一些内容:
Public Function isPrime(input As Integer) As Boolean
endCounter = input - 1
For primeCounter As Integer = 1 To endCounter
If input Mod primeCounter <> 0 Then
Return True
Else
Return False
End If
Next
Return False
End Function
因为您在&#39;具有模数&#39;之后立即使用Return
线。删除Return True
和else
行,如果找到模数值,则只返回False
。最后一行应该是Return True
- 没有模数值,因此它是一个素数。
为此,您需要将测试更改为
If input Mod primeCounter == 0 Then
和将开始测试从1
更改为2
。
您不需要针对1
进行测试,并且您不需要一直测试input
或(您可能误解了那里的某些内容){{1 }}。最合乎逻辑的端点是input - 1
,即起始值的平方根的下一个更高的数字。