2016-11-05 7 views
0

Я застрял на этом какое-то время, и я не могу заставить ее работать. Я хочу, чтобы моя программа была в состоянии выбрать случайное слово из массива «Слова» (содержимое массива, ранее добавленное пользователем), и позволить пользователю затем ввести другое слово и посмотреть, совпадает ли оно со случайным выбранным словом, выбранным программой из массив. Если слова совпадают с сообщением, оно будет выведено, но если не будет выведено сообщение, но система должна указать пользователю, если какие-либо буквы, которые они ввели, были в случайной строке. Я знаю, это совсем немного, но я застрял целую вечность, ха-ха, спасибо! Вот часть кода, который я использовал, немного упрощенного.Согласование введенной строки со случайной строкой

частной юридической силы (отправитель объекта, EventArgs е) btnGuess_Click {

 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

Здесь, вероятно, хорошо, но в целом неплохо создать новый экземпляр «Случайный» для каждого случайного числа, которое вам нужно. – Jens

+0

Привет, Спасибо за ваш ответ, но так, как мне это нужно, каждый раз, когда пользователь вводит 6 слов. Каждый раз шесть слов будут разными, поэтому я не задал каждое слово в массиве как константу. – JordonG

+0

@JordonG, мой код в основном показывает, как _ «... иметь возможность выбирать случайное слово из массива« Слова »_. Я инициализировал 'слова' константами только для целей тестирования. Но вы можете инициализировать его, как вам нужно – user3598756

0
Random rand = new Random() 

    for (int i = 0; i < words.Length; i++) 
    { 
     words[i] = rand.ToString(); 
    } 

В этом цикле вы присваиваете выход rand.ToString() для каждого элемента в массиве. Если вы посмотрели на массив после цикла, каждый элемент будет «System.Random», потому что вызов метода ToString для объекта типа Random возвращает тип объекта в виде строки.

Когда вы создаете новый объект Random, вы создаете объект. Объект, который может вернуть вам случайные числа. Вы НЕ создаете случайное число.

Вы хотите выбрать одну из строк из массива, вот как это можно сделать.

string thirdWordFromMyArrayOfWords = words[3]; 

Чтобы получить случайное число с помощью Random, которая будет находиться в пределах диапазона Вашего слова элемента:

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

     } 
    } 
}