我的主要功能有什么问题

时间:2015-10-06 15:19:36

标签: vb.net

我是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

结束班

1 个答案:

答案 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 Trueelse行,如果找到模数值,则只返回False。最后一行应该是Return True - 没有模数值,因此它是一个素数。

为此,您需要将测试更改为

If input Mod primeCounter == 0 Then

将开始测试从1更改为2

您不需要针对1进行测试,并且您不需要一直测试input或(您可能误解了那里的某些内容){{1 }}。最合乎逻辑的端点是input - 1,即起始值的平方根的下一个更高的数字。