Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 什么';我在这个Vb程序中的逻辑有什么问题?_Vb.net_Visual Studio 2012_Numbers - Fatal编程技术网

Vb.net 什么';我在这个Vb程序中的逻辑有什么问题?

Vb.net 什么';我在这个Vb程序中的逻辑有什么问题?,vb.net,visual-studio-2012,numbers,Vb.net,Visual Studio 2012,Numbers,我对visualbasic还不熟悉,我刚开始在学校上visualbasic课程。我被指派编写一个应用程序,告诉我文本框中的输入是否是素数 我在Visual Studio中编写了以下代码片段: Public Class PrimeNumberApp Public Sub CheckButton_Click(sender As Object, e As EventArgs) Handles CheckButton.Click Dim x, y As Integer

我对visualbasic还不熟悉,我刚开始在学校上visualbasic课程。我被指派编写一个应用程序,告诉我文本框中的输入是否是素数

我在Visual Studio中编写了以下代码片段:

Public Class PrimeNumberApp

    Public Sub CheckButton_Click(sender As Object, e As EventArgs) Handles CheckButton.Click
        Dim x, y As Integer
        x = Val(PrimeTextBox.Text)

        For y = 2 To (x - 1)

            Select Case x
                Case Is = (33), (77), (99)
                    MsgBox("Its not a prime number, try a different number!")
                    Exit Sub
            End Select

            If x Mod y = 0 Then
                MsgBox("Its not a prime number, try a different number!")
                Exit Sub

            Else
                MsgBox("Its a prime number, you're golden!")
                Exit Sub
            End If
        Next

        Select Case x
            Case Is <= 0
                MsgBox("I'm only accepting values above 0. :p")
                Exit Sub
        End Select

    End Sub

但是如果我真的想在编码方面表现出色,那么这样做是不健康的。因此,我的问题是,当在文本框中键入任何整数时,如何使该程序固定显示正确的消息框。谢谢。

您的代码似乎根本不起作用。似乎总是说每个数字都是素数。您循环遍历每个可能的除数,并在该循环中测试输入是否可被当前除数均匀整除。这一部分是有道理的。但问题是,无论测试结果如何,您总是在第一次迭代后立即退出循环。请从循环内部密切注意以下代码:

If x Mod y = 0 Then
    MsgBox("Its not a prime number, try a different number!")
    Exit Sub
Else
    MsgBox("Its a prime number, you're golden!")
    Exit Sub
End If
如果我们删除所有虚假的细节,您可以看出逻辑存在缺陷:

If MyTest = True Then
    Exit Sub
Else
    Exit Sub
End If
正如您所看到的,无论测试结果如何,它总是会退出循环。因此,循环永远不会超过第一次迭代。为了让它继续测试每个可能的除数,您需要删除
Exit Sub
语句,并在变量中跟踪结果。例如,类似这样的事情:

Dim isPrime As Boolean = True
For y = 2 To x - 1
    If XIsEvenlyDivisibleByY Then
        isPrime = False
        Exit For
    End If
Next
If isPrime Then
    ' ...
Else
    ' ...
End If
请注意,一旦找到第一个可均匀整除的除数,我就让它退出了。再进一步搜索也没有意义了,因为一个就足以使它不是质数


为了实现它的价值,您应该使用
Integer.TryParse
而不是
Val
,并且应该使用
MessageBox.Show
而不是
MsgBox
Val
MsgBox
是旧的VB6样式函数。最好只使用较新的.NET版本。

下面是一个如何查找素数的示例,例如最多100个,使用2个循环检查给定范围内的每个数字。在这个例子中,我从2开始,因为你知道2是素数中最小的

    Dim i As Integer = 2, j As Integer = 2


    For i = 2 To 100

        For j = 2 To (i / j)

            If i Mod j = 0 Then
                Exit For
            End If

        Next

        If (j > (i / j)) Then
            Console.WriteLine("{0} is prime", i)
        End If


    Next

你的问题真的是“我如何判断一个数是否是素数”?你这里有很多多余的信息。因为这是一个常见的问题,所以有很多答案。喜欢这个:嗨,谢谢你的推荐。正如我所说,我对Visual Basic还是新手,我查看了上面的链接,发现了C#中的代码,我需要一种方法来用Visual Basic修复我的程序。你需要发布修改后的代码,这样我才能看到它。@Feyisayosnubi你会发现有很多用C#编写的优秀示例代码。对C#语法有一个基本的了解是值得的,这样才能阅读代码并将其翻译成您选择的语言。哇,感谢您的精心设计,我删除了代码中的所有
Exit Sub
语句,并添加了
End for
语句,但仍然得到了一个消息框,即我前面提到的数字都是素数。还有什么问题吗?@feyisayosnubi-使用调试器逐行检查代码,您将找到问题的根源。另外,这是一个学习使用调试器的好机会。非常感谢大家,哈哈,我还有一件事想问,我如何让我的代码中的按钮控件事件也在按键时启动?因此,用户不必每次都在我的程序中按一个按钮来获得结果,而只需按
Enter
键即可获得与按按钮相同的效果这非常简单。转到右侧的表单属性,选择属性“accept button”,然后选择要在按enter键时触发的按钮。表单上还有一个cancel属性,在按下escape时触发按钮。作为本论坛的一个良好实践,别忘了投票选出一个有用的答案:)非常感谢费尔南多,我本来会投票赞成你的答案,但我不能,因为我的声誉还不超过15岁(…你给出的建议效果很好,正如我所期望的那样:D…但是如果我想在按下键盘上的“B”键时调用按钮事件处理程序中的语句,该怎么做?避免代码的更简单方法是在按钮属性上。转到(要启动的按钮的)文本属性在你想要的字母前加上一个符号(本例中为b)然后,一旦你按下ALT+字母,按钮就会触发,EX->和Button我们都需要学习,我建议你阅读一些教程或书籍,供初学者使用,这取决于你选择哪一个。这是我的博客,我有关于VB、C++、C++、java等等的PDF格式的书,看一看。
    Dim i As Integer = 2, j As Integer = 2


    For i = 2 To 100

        For j = 2 To (i / j)

            If i Mod j = 0 Then
                Exit For
            End If

        Next

        If (j > (i / j)) Then
            Console.WriteLine("{0} is prime", i)
        End If


    Next