2016-11-05 115 views
0

我一直堅持這一段時間,現在我似乎無法得到它的工作。我希望我的程序能夠從「Words」數組中選擇一個隨機單詞(用戶先前添加的數組內容),並允許用戶輸入另一個單詞並查看它是否與程序選擇的隨機選擇的單詞相匹配陣列。如果單詞匹配一條消息將被輸出,但如果不是,則還將輸出一條消息,但是系統應該向用戶指示他們已經輸入的任何字母是否在隨機字符串中。我知道這是相當多的,但我已經被困住了很久,哈哈,謝謝! 這是我一直在使用的代碼的一部分,有點簡化。將輸入的字符串匹配到一個隨機字符串

私人無效btnGuess_Click(對象發件人,EventArgs的) {

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

回答

0

你必須

  • 與實際的話初始化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(); 
    } 
+0

這裏可能是好的,但總的來說,爲每個需要的隨機數字創建一個新的Random(隨機)實例是一個壞主意。 – Jens

+0

嗨,感謝您的回覆,但我需要的方式是每次輸入6個單詞。這6個單詞每次都會有所不同,這就是爲什麼我沒有將數組中的每個單詞都設置爲常量。 – JordonG

+0

@JordonG,我的代碼主要顯示如何_「...能夠從」Words「數組中選擇一個隨機單詞」_「。我僅僅爲了測試目的而用常量初始化了「單詞」。但你可以初始化它,因爲你需要 – user3598756

0
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]; 

要獲取用隨機的隨機數,這將是你的話元素的範圍內:

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

你需要減去之一,因爲數組有6個元素(words.Length = 6)但它從0,1,2,3,4,5開始計數,所以如果你試圖引用單詞[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)])) 

別的東西要考慮的是,因爲每一個點擊按鈕時,你會得到一個新的隨機數,因此時間的,要求一個新的隨機數一個新的隨機單詞出陣列。

+0

感謝您的回覆!我要用這種方式來嘗試,這意味着在整個項目中,生病不得不採取完全不同的方法。我讓你知道我是怎麼得到的! – JordonG

0
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"); } 
      } 

     } 
    } 
} 
相關問題