首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中显示随机数

在C#中显示随机数
EN

Stack Overflow用户
提问于 2009-05-31 23:07:41
回答 3查看 3.1K关注 0票数 2

我正在尝试设计一个让人猜测数字的代码。我定义了要在列表框中显示的数字范围。我开始写Random(1,10),但如果我输入11,它仍然会写在我的列表框中。我怎么写从我的范围中选择的数字,它是1-10?

下面是我的代码的一部分:

代码语言:javascript
复制
     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,程序将不会接受它。

我做了这样的东西:

代码语言:javascript
复制
        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;
        } 

程序出了点问题。

更新

对于纳撒尼尔,我尝试了这个:

代码语言:javascript
复制
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次。不确定在哪里实现它

代码语言:javascript
复制
  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;
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-10 18:53:18

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

代码语言:javascript
复制
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;

        }
    }
}

进行了编辑,以防止在最后一次猜测中正确猜测数字时出现“You‘s out of guess”消息。

票数 2
EN

Stack Overflow用户

发布于 2009-05-31 23:11:48

这行代码:

代码语言:javascript
复制
int returnNunmber = RandomNumber(1, 10); 

不执行任何操作,因为在下一行中,returnNumber将用作输出变量,并且将是textBox1中的任意数字。删除

代码语言:javascript
复制
int.TryParse(textBox1.Text, out returnNumber);

行,它将在您的列表框中添加一个从1到10的随机数。

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

代码语言:javascript
复制
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);            
  }
票数 10
EN

Stack Overflow用户

发布于 2009-06-10 12:43:26

让我们一块一块地看:

代码语言:javascript
复制
int returnNumber = RandomNumber(1, 10);

没有内置的RandomNumber函数;请注意,对于Random类,end值是独占的,因此对于一个范围内的数字,您需要类似以下内容:

代码语言:javascript
复制
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);    
    }
}

但是,您可以完全丢弃此值:

代码语言:javascript
复制
int.TryParse(textBox1.Text, out returnNumber);

使用out意味着returnNumber的前一个值被完全忽略。我不确定你的意图是什么,但看起来你只是想检查一下值:

代码语言:javascript
复制
if(int.TryParse(textBox1.Text, out returnNumber)
      && returnNumber >= 1 && returnNumber <= 10)
{
    listBox1.Items.Add(returnNumber);
}

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

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

您将需要一个计数器,您可以为失败的尝试递增计数器-类似于:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/933077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档