Глядя, чтобы рандомизировать различные возможные результаты - PullRequest
1 голос
/ 12 марта 2020

Я привык к программированию на С ++ и все еще относительно новичок в c#. Я рассчитываю на вывод различных «статистика» для ввода числа. Таким образом, если вы введете 1, то случайное перемешивание произойдет между 3 возможными выходами. Если вы введете 2, произойдет другое случайное перемешивание.

Я не совсем знаю, с чего начать. Если l oop мне достаточно ясно, но после этого я ищу случайный список или рандомизирую? Я думал о перетасовке в массиве. Есть ли более эффективный способ сделать это?

using System;

namespace monstergame{//enter a random number of soldiers under 5 and the program randomly gives you the number you typed and their stats.

static class program {
  public static void Main () {
    Console.WriteLine ("\nWelcome to monstergame"+"\n         ***"); 

    int soldiers = GetSoldiers();

    Console.WriteLine("\nThis is the data for all [ " + soldiers +" ] of your soldiers. Their stats are as follows: ");
  }

  public static int GetSoldiers() {
    Console.WriteLine("\nHow many soldiers would you like?  \n>> your soldiers can not be more than 5 <<");

    int soldiers; 
    int.TryParse(Console.ReadLine(), out soldiers);

    return soldiers;
  }
}

//three cases for every soldier number 1 to 5 will be randomized

//string [] stats = {"A","B","C","a","b","c"};

Итак:

входные солдаты: 3

//array for the input 3 is shuffled through and one of the strings is selected as output so if the array for input _3_ is string [] stats = {"string 1", "string 2", "string 3"}; then one random string is output for the whole array.

окончательный результат будет:

Ваша статистика для _3_ солдат: / случайная строка 1 ИЛИ 2 ИЛИ 3

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Вы можете использовать Jagged Array . У вас будет 5 различных массивов строк, каждый из которых представляет возможные значения, основанные на вводе пользователя.

Затем вы можете получить индекс в свой зубчатый массив, взяв soldiers - 1, затем используйте Random чтобы получить элемент из этого массива.

private static class Program
{
    // Existing code omitted...
    private static string GetStats(int soldiers)
    {
        int statIdx = soldiers - 1;
        // Bounds checking omitted...
        string[] stats = _stats[statIdx];
        return stats[_rng.Next(0, stats.Length)];
    }

    private static readonly Random _rng = new Random();
    private static readonly string[][] _stats = new string[][]
    {
        new string[] { "A", "B", "C" }, // User selected 1 for soldiers
        new string[] { "D", "E", "F" }, // User selected 2 for soldiers
        new string[] { "G", "H", "I" }, // User selected 3 for soldiers
        new string[] { "J", "K", "L" }, // User selected 4 for soldiers
        new string[] { "M", "N", "O" }  // User selected 5 for soldiers.
    };
}
1 голос
/ 12 марта 2020

Итак, имея массив, скажем

 string [] stats = new string[] {
   "A", "B", "C", "a", "b", "c"
 };

, мы хотим взять 3 штучных предметов. Мы можем сделать это с помощью Random и Linq , например (при условии, что все предметы одинаково вероятны для взятия)

 using System.Linq;

 ...

 private static Random s_Random = new Random();

 ...

 int soldiers = 3;

 string[] random = stats
   .OrderBy(item => s_Random.NextDouble()) // Random order (shuffle)
   .Take(soldiers)                         // soldiers top items
   .ToArray();                             // materialized as an array

Редактировать: мы можем обернуть подпрограмму в метод:

 private static Random s_Random = new Random();

 private static T[] TakeRandom<T>(IEnumerable<T> source, int take) {
   return source 
     .OrderBy(item => s_Random.NextDouble()) 
     .Take(take) 
     .ToArray();
 }

, а затем использовать ее:

 string[] random = TakeRandom(stats, 3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...