【问题标题】:Matching an entered String to a random String将输入的字符串与随机字符串匹配
【发布时间】:2017-03-19 06:42:51
【问题描述】:

我已经坚持了一段时间了,我似乎无法让它工作。我希望我的程序能够从“单词”数组(用户先前添加的数组内容)中选择一个随机单词,然后允许用户输入另一个单词,看看它是否与程序从数组。如果单词匹配,则会输出一条消息,但如果不匹配,也会输出一条消息,但系统应向用户指示他们输入的任何字母是否在随机字符串中。我知道这有点多,但我已经被困了很久了哈哈,谢谢! 这是我一直在使用的部分代码,有点简化。

private void btnGuess_Click(object sender, EventArgs e) {

        string guess = txtGuess.Text;

        string[] words = new string[6];
        lstWords.Items.Add(txtEnterWord.Text);

        Random rand = new Random();

        for (int i = 0; i < words.Length; i++)
        {
            words[i] = rand.ToString();
        }
        if (String.Equals(guess, rand))
        {
            MessageBox.Show("Congratulations you have won! Your words are a match");
        }
        else
        {
            MessageBox.Show("Sorry but your words are not a match, try again");
        }
    }

【问题讨论】:

    标签: c# arrays forms if-statement random


    【解决方案1】:

    你必须

    • 用实际单词初始化您的 words 数组

    • 有一个方法可以从words数组中取出一个随机词

    如下:

       private void btnGuess_Click(object sender, EventArgs e)
        {
            string guess = txtGuess.Text;
    
            string[] words = new string[6] { "word1", "word2", "word3", "word4", "word5", "word6" }; //<--| initialize words array
            lstWords.Items.Add(txtEnterWord.Text); //<--| what is that for?
    
            string randWord = GetRandomWord(words); //<--| get rabdom word from words array
    
            if (String.Equals(guess, randWord))
            {
                MessageBox.Show("Congratulations you have won! Your words are a match");
            }
            else
            {
                MessageBox.Show("Sorry but your words are not a match, try again");
            }
    
        }
    
        static private string GetRandomWord(string[] words)
        {
            Random rnd = new Random();
            return words[rnd.Next(0, words.Length)].ToString();
        }
    

    【讨论】:

    • 这里可能没问题,但一般来说,为您需要的每个随机数创建一个新的Random 实例是个坏主意。
    • 您好,感谢您的回复,但我需要的方式是每次用户输入 6 个单词。这 6 个单词每次都会不同,这就是为什么我没有将数组中的每个单词设置为常量。
    • @JordonG,我的代码主要展示了如何 "...能够从 "Words" 数组 " 中选择一个随机单词。我用常量初始化words 只是为了测试目的。但是你可以根据需要初始化它
    • @Jens,是的。我在 GetRandomWord() 方法中创建了一个 Random 实例,因为根据 OP 的问题,它的使用允许它。但一般来说,我会在方法之外实例化一个 Random 实例并将其作为参数传递
    • 再次感谢你们的帮助,但我已经度过了一个漫长的早晨,开始感到压力很大,哈哈,大脑是糊状的。当您说根据需要初始化它时,我删除了“word1、word 2 等”位。你问这个“lstWords.Items.Add(txtEnterWord.Text);”的部分部分是为了。也就是说,输入到“txtEnterWord”文本框中的单词将被添加到单词数组中。当我运行程序时输入相同的六个单词,当我再次输入相同的单词以检查它是否与选择的随机单词匹配时,我得到“未处理的空引用异常”。
    【解决方案2】:
     Random rand = new Random()
    
        for (int i = 0; i < words.Length; i++)
        {
            words[i] = rand.ToString();
        }
    

    在这个循环中,您将 rand.ToString() 的输出分配给数组中的每个元素。如果您在循环之后查看数组,那么每个元素都会是“System.Random”,因为在 Random 类型的对象上调用 ToString 方法会以字符串形式返回对象的类型。

    当您创建一个新的 Random 对象时,您就是在创建一个对象。一个可以返回随机数的对象。你不是在创建一个随机数。

    您想从数组中选择一个字符串,这就是您可以将其取出的方法。

    string thirdWordFromMyArrayOfWords = words[3];
    

    要使用 Random 获得一个在您的 words 元素范围内的随机数:

    int randomNumberWithinTheRangeOfMyArray = rand.Next(0,words.Length-1)
    

    您需要减一,因为该数组有 6 个元素(words.Length = 6),但它从 0、1、2、3、4、5 开始计数,所以如果您尝试引用 words[6],您会抛出异常。

    int randomNumberWithinTheRangeOfMyArray = rand.Next(0,words.Length-1);
    string randomWordFromArray = words[randomNumberWithinTheRangeOfMyArray];
     if (String.Equals(guess, randomWordFromArray))
    

    还可以进一步压缩

    if (String.Equals(guess, words[rand.Next(0,words.Length-1)]))
    

    要考虑的其他一点是,由于每次单击按钮时都会调用一个新的随机数,因此您会得到一个新的随机数,因此会从数组中得到一个新的随机词。

    【讨论】:

    • 感谢您的回复!我将尝试这种方式,这意味着我必须对整个程序采取完全不同的方法。我会让你知道我过得怎么样!
    【解决方案3】:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace RandomWords
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                string[] words = new[] { "csharp", "Stack", "overflow", "microsoft", "word5", "Coding"};
                Random rnum = new Random();
                string input = null;
                while ( input != "end") {
                    int intnum = rnum.Next(0, words.Length);
                    Console.WriteLine("Guess a word or enter end to exit");
                    input = Console.ReadLine();
                  List<string> l =  words.Where(x => x == input).ToList<string>();
                  if (l.Count != 0) { Console.WriteLine("Congratulations you have won! Your words are a match"); } else { Console.WriteLine("Sorry but your words are not a match, try again"); }
                }
    
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-08
      • 2011-09-16
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      相关资源
      最近更新 更多