2013-03-20 2 views
0

Я пишу простого переводчика языка, который представит английское слово и попросит соответствующее иностранное слово. Пока код будет выбирать случайное слово из массива, однако теперь я пытаюсь заставить его выбрать соответствующее чужое слово из списка. Вот код до сих пор:Как случайно выбрать строку в C#

public class Words 
    { 
     public int spanishindex; 
     string[] EnglishWords = { "Yellow", "Yello", "Yelow", "Yllow", "ellow" }; 
     string[] SpanishWords= { "giallo", "giall", "iallo", "gllo", "lo" }; 

     public String GetRandomWord() 
     { 
      Random randomizer = new Random(); 
      index = randomizer.Next(EnglishWords.Length); 
      string randomword = EnglishWords[randomizer.Next(index)]; 
      spanishindex= index; 
      return randomword; 
     } 

     public String MatchSpanishWord() 
     { 
      string matchword = SpanishWords[spanishindex]; 
      return matchword; 
     } 
    } 

Мои мысли были пропускание значения индекса противиться случайной величиной в методе MatchSpanishWord я бы получить соответствующее слово (как список в порядке)

Так если выбрано «холодное», испанский эквивалент должен быть «lo»

Любая помощь будет оценена, спасибо.

+3

В качестве примечания 'Random рандомизер = новый Random(); 'должен быть вне этой функции, иначе вы будете задавать вопрос [ как это] (http://stackoverflow.com/search?q=random+ [C% 23] + те же + цифры) через несколько часов, когда у вас больше кода. –

ответ

3

Проблема в том, что вы вызывали случайное дважды: один раз, чтобы создать случайный индекс, а затем снова в индексе массива. Я установил вашу ошибку в коде ниже:

public class Words 
{ 
    public int spanishindex; 
    string[] EnglishWords = { "Yellow", "Yello", "Yelow", "Yllow", "ellow" }; 
    string[] SpanishWords= { "giallo", "giall", "iallo", "gllo", "lo" }; 

    public String GetRandomWord() 
    { 
     Random randomizer = new Random(); 
     index = randomizer.Next(EnglishWords.Length); 
     string randomword = EnglishWords[index]; //<---- this is the fix 
     spanishindex= index; 
     return randomword; 
    } 

    public String MatchSpanishWord() 
    { 
     string matchword = SpanishWords[spanishindex]; 
     return matchword; 
    } 
} 
+1

Еще одна ошибка: создание экземпляра 'Random' перед каждым использованием может привести к номерам, которые [менее« случайные », чем вы хотели бы] (http://stackoverflow.com/q/767999/238688), особенно если« GetRandomWord 'вызывается внутри цикла - лучше сделать' randomizer' полем класса со статическим инициализатором. –

+0

Спасибо, все отлично! – Hulaz

0

Изменение:

string randomword = EnglishWords[randomizer.Next(index)]; 

к

string randomword = EnglishWords[index]; 

... если вы не хотите, случайный индекс меньше показателя у вас уже случайно найден.

0

Вы должны изменить

string randomword = EnglishWords[randomizer.Next(index)]; 

в

string randomword = EnglishWords[index];