显示随机数

时间:2009-05-31 23:07:41

标签: c# random

我正在尝试设计一个猜测数字的代码。我定义了在列表框中显示的数字范围。我开始写随机(1,10),但如果我输入11,它仍然写在我的列表框中。我怎样才能写出从我的范围中选择的数字,即1-10?

我在这里很迷茫。有什么想法吗?

谢谢,这是我的代码的一部分:

     private void btnOk_Click(object sender, EventArgs e)
      {

        string yourNumber;
        yourNumber = textBox1.Text.Trim();

        int returnNumber = RandomNumber(1, 10);                 
        int.TryParse(textBox1.Text, out returnNumber);
        listBox1.Items.Add(returnNumber);            
      }

====== 补充问题 如果我想显示一个数字范围,例如1-10,我怎么能这样做: 因此,例如,如果用户将键入11,则程序将不接受该操作。

我做了这样的事情:

        int returnNumber = RandomNumber(1, 10);    

        string yourNumber;
        yourNumber = textBox1.Text.Trim();  


        if(Int32.TryParse(textBox1.Text>=1)) && (Int32.TryParse(textBox1.Text<=10));
        {
        listBox1.Items.Add(yourNumber);
        textBox1.Text = string.Empty;
        } 

程序中有问题

==============

你好再次感谢纳撒尼尔的回复。但我试过这个:

int returnNumber=RandomNumber(1,10);
int counter=1;
int yourNumber;

Int32.TryParse(textBox1.Text.Trim(), out yourNumber);
if (yourNumber >=1 && yourNumber <= 10)
{
  listBox1.Items.Add(yourNumber);
}
else
{
  MessageBox.Show("Please enter a number between 1-10");
}

我想做的是设计一个猜测数字的程序。所以这是第一部分。

====

嗨再次,这是我的最终代码:如果您能就我如何做得更好,我会很高兴。谢谢。我认为我接下来要做的就是限制用户输入输入的次数。这意味着,他们只能猜出正确的数字3次或5次。不确定在哪里实施

  namespace Guessing_Game
   {
  public partial class Form1 : Form
   {
    private static int randomNumber;
    private const int rangeNumberMin = 1;
    private const int rangeNumberMax = 10;

    public Form1()
    {
        InitializeComponent();
        randomNumber = GenerateNumber(rangeNumberMin, rangeNumberMax);
    }


    private int GenerateNumber(int min,int max)
    {
        Random random = new Random();
        return random.Next(min, max);
    }

    private void btnOk_Click(object sender, EventArgs e)
    {
        int yourNumber = 0;

        Int32.TryParse(textBox1.Text.Trim(), out yourNumber);

        if (yourNumber>= rangeNumberMin && yourNumber<=rangeNumberMax)
        {
            listBox1.Items.Add(yourNumber);
            if (yourNumber > randomNumber)
            {
                listBox2.Items.Add("No the Magic Number is lower than your number");
            }

            if (yourNumber < randomNumber)
            {
                listBox2.Items.Add("No, the Magic Number is higher than your number");
            }

            if(yourNumber==randomNumber)
            {
                listBox2.Items.Add("You guessed the Magic Number!");
                btnRestart.Enabled = true;
            }
        }
        else
        {
            MessageBox.Show("Please enter a number between " + rangeNumberMin + " to " + rangeNumberMax);
        }
    }

    private void btnRestart_Click(object sender, EventArgs e)
    {
        listBox2.Items.Clear();
        listBox1.Items.Clear();
        textBox1.Text = null;
        randomNumber = GenerateNumber(rangeNumberMin, rangeNumberMax);
        btnRestart.Enabled = false;
    }
}

3 个答案:

答案 0 :(得分:10)

该行:

int returnNunmber = RandomNumber(1, 10); 

什么都不做,因为在下一行中,returnNumber用作输出变量,并且将是textBox1中的任何数字。

删除
int.TryParse(textBox1.Text, out returnNumber);

行,它会在列表框中添加1到10的随机数。

EDIT :::: 要回答其他问题,请尝试:

private void btnOk_Click(object sender, EventArgs e)
  {
    string yourNumber;
    yourNumber = textBox1.Text.Trim();
    int returnNumber;    
    int.TryParse(textBox1.Text, out returnNumber);
    if( returnNumber < 1 || returnNumber > 10) {
      returnNumber = RandomNumber(1, 10);
    }
    listBox1.Items.Add(returnNumber);            
  }

答案 1 :(得分:2)

让我们一块一块:

int returnNumber = RandomNumber(1, 10);

没有内置RandomNumber功能;请注意,对于Random类,结束值是独占的,因此对于范围内的数字,您需要以下内容:

static readonly Random rand = new Random();
static int Random(int min, int max) {
    if(max < min) throw new ArgumentOutOfRangeException("max");
    lock(rand) {
        return rand.Next(min, max + 1);    
    }
}

然而,你完全抛弃了这个值:

int.TryParse(textBox1.Text, out returnNumber);

out的使用意味着完全忽略returnNumber的先前值。我不确定你的意图是什么,但似乎就像你只想检查价值一样:

if(int.TryParse(textBox1.Text, out returnNumber)
      && returnNumber >= 1 && returnNumber <= 10)
{
    listBox1.Items.Add(returnNumber);
}

我试着看看最后一个例子,但是你真的不清楚你想要做什么 - 你能澄清一下吗?


(问题编辑和评论后编辑)

你需要一个计数器,你可以为失败的尝试增加一个计数器 - 例如:

using System;
using System.Drawing;
using System.Windows.Forms;
class MyForm : Form {
    Button btn;
    ListBox lst;
    TextBox tb;
    const int MaxTries = 3, MaxNumber = 10;
    int targetNumber, guessCount = 0;
    public MyForm() {
        targetNumber = new Random().Next(1, MaxNumber + 1);
        Text = "Guess a number";
        Icon = SystemIcons.Question;
        Controls.Add(lst = new ListBox {Dock=DockStyle.Fill});
        Controls.Add(btn = new Button {Text="Guess",Dock=DockStyle.Top});
        Controls.Add(tb = new TextBox {Dock=DockStyle.Top});
        btn.Click += btn_Click;
    }

    void  btn_Click(object sender, EventArgs e) {
        int userNumber;
        if (int.TryParse(tb.Text.Trim(), out userNumber)) {
            if (userNumber < 1 || userNumber > MaxNumber) {
                lst.Items.Add("Did I mention... between 1 and " + MaxNumber);
            } else {
                if (userNumber == targetNumber) {
                    lst.Items.Add("Well done! You guessed well");
                    btn.Enabled = false; // all done
                } else {
                    lst.Items.Add(targetNumber < userNumber
                        ? "Try a bit lower" : @"It is bigger than that");
                    if (++guessCount >= MaxTries) {
                        btn.Enabled = false;
                        lst.Items.Add("Oops, should have picked more wisely");
                    }
                }
            }
        } else {
            lst.Items.Add("Nice; now give me a number");
        }
    }
    [STAThread]
    static void Main() {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MyForm());
    }
}

答案 2 :(得分:2)

对代码进行一些细微更改,缩小几行并添加限制代码,使用猜测列表作为计数器:

namespace Guessing_Game
{
   public partial class Form1 : Form
   {
        private static int randomNumber;
        private const int rangeNumberMin = 1;
        private const int rangeNumberMax = 10;
        private const int maxGuesses = 5;

        public Form1()
        {
            InitializeComponent();
            randomNumber = GenerateNumber(rangeNumberMin, rangeNumberMax);
        }


        private int GenerateNumber(int min,int max)
        {
            Random random = new Random();
            return random.Next(min, max);
        }

        private void btnOk_Click(object sender, EventArgs e)
        {
            int yourNumber = 0;

            if (Int32.TryParse(textBox1.Text.Trim(), out yourNumber) &&
               yourNumber>= rangeNumberMin && yourNumber<=rangeNumberMax)
            {

                listBox1.Items.Add(yourNumber);

                if (yourNumber > randomNumber)
                {
                    listBox2.Items.Add("No the Magic Number is lower than your number");
                }
                else if (yourNumber < randomNumber)
                {
                    listBox2.Items.Add("No, the Magic Number is higher than your number");
                }
                else
                {
                    listBox2.Items.Add("You guessed the Magic Number!");
                    textBox1.Enabled = false;
                    btnOk.Enable = false;
                    btnRestart.Enabled = true;
                }

                //Will stop on the 5th guess, but guards the case that there were more than 5 guesses
                if(listBox1.Items.Count >= maxGuesses && yourNumber != randomNumber)
                { 
                    listBox2.Items.Add("You are out of guesses!");
                    textBox1.Enabled = false;
                    btnOk.Enable = false;
                    btnRestart.Enabled = true;
                }
            }
            else
            {
                MessageBox.Show("Please enter a number between " + rangeNumberMin + " to " + rangeNumberMax);
            }
        }

        private void btnRestart_Click(object sender, EventArgs e)
        {
            listBox2.Items.Clear();
            listBox1.Items.Clear();
            textBox1.Text = null;
            randomNumber = GenerateNumber(rangeNumberMin, rangeNumberMax);
            btnRestart.Enabled = false;
            textBox1.Enabled = true;
            btnOk.Enable = true;

        }
    }
}

编辑以防止在最后一次猜测时正确猜到数字时“你猜不出来”的消息。