数字生成器循环崩溃程序

Number generator loop crashing program

我在我的程序中添加了一个循环,以确保该程序不会输出太难的数学问题;这意味着我需要第一个值(左边的数字)比右边的大,否则问题将输出否定答案。然而,我显然做错了,因为它使程序崩溃。

    Randomize()
    Dim values1 As Integer = CInt(Int((10 * Rnd()) + 1))
    First_Number.Text = values1

    Sign_Box.Text = "-"

    Randomize()
    Dim values2 As Integer = CInt(Int((10 * Rnd()) + 1))
    Second_Number.Text = values2
    AnswerTextBox.Tag = values1 - values2
    AnswerTextBox.Text = AnswerTextBox.Tag
    Do Until values1 > values2
    Loop

这是代码,我知道循环是错误的,但是目前我真的不知道如何使用循环。提前感谢您的帮助。

代码 2:

    Dim values1 As Integer = 0
    Dim values2 As Integer() = {2, 4, 5, 10}
    Dim randomizer As New Random
    Dim value2 As Integer = values2(randomizer.Next(values2.Length))

    Do Until values1 > values2
        Randomize()
        values1 = CInt(Int((10 * Rnd()) + 1))

    Loop

    First_Number.Text = values1
    Second_Number.Text = value2
    AnswerTextBox.Tag = values1 / value2
    AnswerTextBox.Text = AnswerTextBox.Tag
    Sign_Box.Text = "/"

使用上面的代码,我试图做同样的事情,但是我得到了一个错误:

错误 1 ​​运算符“>”未针对类型 'Integer' 和“一维整数数组”定义。

这可能不是最好的方法,但您可以使用现有的方法尝试类似的方法:

Dim values1 As Integer = 0
Dim values2 As Integer = 0

Do Until values1 > values2
Randomize()
values1 = CInt(Int((10 * Rnd()) + 1))

Randomize()
values2 = CInt(Int((10 * Rnd()) + 1))

Loop

First_Number.Text = values1
Sign_Box.Text = "-"
Second_Number.Text = values2
AnswerTextBox.Tag = values1 - values2
AnswerTextBox.Text = AnswerTextBox.Tag

您可以完全消除循环。想想答案的 upper/lower 界限应该是多少,让你的 Rnd() 调用只生成问题的第二部分和 answer。然后你就可以准确地推断出问题的第一部分了。这完全消除了编写循环的需要。

此外,多次调用 Randomize() 并不是一个好主意。理想情况下,您可以对整个程序或程序段使用相同的 Randomize() 调用。这是代码:

Dim r As New Random()
Dim value2 As Integer = r.Next(1,11) '1 inclusive, 11 is exclusive. allows values from 1 to 10
Dim answer As Integer = r.Next(0,11-value2) '11-value2 keeps value1 from being higher than you want

First_Number.Text = value2 + answer
Sign_Box.Text = "-"
Second_Number.Text = value2
AnswerTextBox.Tag = answer
AnswerTextBox.Text = AnswerTextBox.Tag

现在是原始代码。您现有的代码会崩溃,因为您的整个循环都包含在这段代码中:

Do Until values1 > values2
Loop

除此之外什么都不重要。由于 values1values2 都不会更改该代码,如果它们开始时循环条件失败,它们将 总是 使循环条件失败,并且您的代码得到卡在那里。

要修复它,您可以更改此代码:

Dim values2 As Integer = CInt(Int((10 * Rnd()) + 1))
Second_Number.Text = values2
AnswerTextBox.Tag = values1 - values2
AnswerTextBox.Text = AnswerTextBox.Tag
Do Until values1 > values2
Loop

看起来像这样:

Dim values2 As Intege2 = CInt((10 * Rnd()) + 1)
Do Until values1 > values2
    values2 = CInt((10 * Rnd()) + 1)
Loop

Second_Number.Text = values2
AnswerTextBox.Tag = values1 - values2
AnswerTextBox.Text = AnswerTextBox.Tag

但同样,这不如首先避免循环有效。