2014-06-15 36 views
-3

即时解释我试图尽可能具体做什么。 目前我正在与Windows窗体(c#)一个小测试项目工作,并试图创建一个程序,可以帮助孩子培养1-10之间的“乘法表”。随机乘法表 - C#

我发生了一个问题,我不知道如何解决我如何使这些随机工作以这种方式工作。

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

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; 
} 

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

我必须以某种方式告诉随机函数,它不应该随机化以前见过的情况 - 这就是我需要帮助。这应该导致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,因为它已经发生了。

+0

您对这两个文本框的随机撤回相同,并且按照您的解释,例如5 * 5或7 * 7,除非您解释错误....不应该第二个文本框是数字1到10? ......并且非常容易混淆为什么随机做乘法表... – terrybozzio

+0

我想让随机训练让人们不只是学习顺序,而是看看现在的数字。如果我将它设为静态,订单将始终保持一致。我有一个例子,我在这里试图做什么.. http://www.mathsisfun.com/numbers/math-trainer-multiply.html。 richtextbox1将是第一个数字,richtextbox2将是secound。 – Easterlily

回答

0

我会给你一个替代品。我警告你它是一个非常简单的,但我认为它的目的。你可以复制&粘贴到一个新的项目,只需在右上角放置一个按钮和一个文本框(只是因为它放在测试位置,而drawstring的x和y坐标将会在下面画出来,你可以改变这个offcourse),然后在文本框中插入一个数字并点击按钮。

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:你也有你的项目:)来wireup按键事件

Ofcourse,你甚至不需要有硬编码list.If所以只是把这个在foreach循环:

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

正如你所看到的,你可以随意挑选一个数字(你的随机因子)并查看结果。

+0

我不太确定你的代码是干什么的,我做了一个测试项目,并在创建按钮和文本框后将代码复制/粘贴到项目中。但是,当我调试程序时,根本没有任何事情发生。除此之外,我认为你误解了我的问题。 – Easterlily

+0

什么也没有发生,因为你必须连接事件处理程序的按钮点击,为表单颜色和文本框按键...之后,只需在文本框中编写一个数字,然后单击按钮 – terrybozzio