数字生成器循环崩溃程序

时间:2015-01-06 15:57:17

标签: vb.net

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

    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运营商'>'未定义类型的“整数”和“整数的一维数组”。

2 个答案:

答案 0 :(得分:3)

您可以完全消除循环。考虑答案的上限/下限应该是什么,让Rnd()次调用只生成问题的第二部分和答案。然后,您可以准确地推断出问题的第一部分。这样就不需要编写循环了。

此外,不止一次致电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

但同样,这首先比避免循环更有效。

答案 1 :(得分:1)

这可能不是最好的方法,但是使用你拥有的东西,你可以尝试类似的东西:

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