带随机的乘法表 - C#

时间:2014-06-15 16:23:14

标签: c# random multiplication

我要解释我尽量做具体的事情。 目前我正在使用Windows Forms(c#)开展一个小测试项目,并且正在尝试创建一个程序,可以帮助孩子们训练1-10之间的“乘法表”。

我遇到了一个问题,我不知道该如何解决这个问题,因为我会以这种方式使randoms工作。

所以,我想要做的是调用这样的方法/类:

private void button1_Click(object sender, EventArgs e) //Just a clickevent from a formsbutton.
{
    richtextbox1.Text = methodRandomValue.toString();
    richtextbox2.Text = methodRandomValue.toString();

}

public int methodRandomValue()
{
    int temporaryvalue = 0: //Will get the value from the randomgenerator.

    Random randomgenerator = new Random();
    ////Im stuck here.
    ////

    return temporaryvalue;
}

因此,这应该返回两个值,这两个值将通过两个richtextbox显示给用户。现在,我不知道如何实现这一点,因为我不希望数学问题返回两次。 I.ex.如果4 * 5已经存在,我不希望再次返回,与5 * 4相同。

我必须以某种方式告诉Random函数它不应该随机化以前见过的情况 - 这是我需要帮助的。这将导致54种独特的情况:(1 * 1,1 * 2,1 * 3 ... 1 * 10)(2 * 2,2 * 3 ... 2 * 10)(3 * 3 ......)等,

示例:因此订单可以是5 * 4然后是3 * 8然后是2 * 7,但是如果一旦存在它们将永远不会返回,因此下一个数字不会是4 * 5或5 * 4,因为它已经发生在这个例子中。

很抱歉,如果我写得很混乱,请告诉我是否需要更好地解释。英语不是我更好的主题。

编辑:

enter image description here

这是一张在调试模式下会是什么样子的图片。所以首先我希望该方法为第一个文本框生成1-10之间的一个随机数,然后我想要同样的东西用于secound文本框。但我不想要,如果第一种情况是图片中的1 * 1,我不希望这种情况再次发生。所以,在某种程度上,随机会跳过1 * 1,因为它已经发生了。

1 个答案:

答案 0 :(得分:0)

我会给你一个替代方案。我警告你这是一个非常简单的方法,但我认为它有用。你可以复制并粘贴到一个新项目,只需在右上角放一个按钮和一个文本框形式(只是因为我把它放在测试的地方,抽绳的x和y坐标将只画下来,你可以改变那个),然后只需在文本框中插入一个数字,然后点击按钮。

    public partial class Form1 : Form
    {
        List<int> numbers = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        bool canInvalidate = false;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            canInvalidate = true;
            Invalidate();
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            if (canInvalidate)
            {
                float x = 20, y = 50;
                int chosen = int.Parse(textBox1.Text);
                foreach (var item in numbers)
                {
                    int result = chosen * item;
                    e.Graphics.DrawString(string.Format("{0} * {1} = {2}", chosen, item, result), Font, Brushes.Black, x, y);
                    y += 10;
                }
            }
        }

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!(char.IsDigit(e.KeyChar)|| e.KeyChar == (char)Keys.Back))
                e.Handled = true;
        }
    }

PS:您还需要在项目中连接keypress事件:)

当然,你甚至不需要拥有硬编码列表。如果只是将它放在foreach循环中:

foreach (var item in Enumerable.Range(1,10))

如您所见,您可以随意选择一个数字(您的随机因素)并查看结果。