Как я могу использовать rnd, сгенерированный в цикле в операторе if - PullRequest
1 голос
/ 10 октября 2019

Мне нужно написать программу, которая симулирует 2 броска костей 4 раза, если 2 кубика заканчиваются тем же самым числом, то определенный множитель нужно увеличить на 10, так что мне удалось смоделировать броски костей с помощью rnd.следующий в цикле. Однако я не знаю, как использовать случайно сгенерированные числа вне цикла

Здесь я сгенерировал 2 случайных числа (броски кубиков)

int valuestone1;
            int valuestone2;
            int multiplier = 0;
            int add10 = 10;
            int multipliernew;
            for (int forassignment = 1; forassignment <= 4; forassignment++)
            {
                Console.WriteLine(valuestone1 = rnd.Next(1, 7));
                Console.WriteLine(valuestone2 = rnd.Next(1, 7));
            }

И здесь я попытался использовать ихдобавить очки к множителю, если 2 числа были одинаковыми

if (valuestone1 == valuestone2)
            {
                multipliernew= multiplier + add10;
            }

Однако это дает сообщение «использование неназначенной локальной переменной» на камнях значений. Как мне сделать эту работу?

1 Ответ

1 голос
/ 10 октября 2019

Вы можете сохранить сгенерированные значения в коллекции , скажем List<Tuple<int, int>>:

  List<Tuple<int, int>> rolls = new List<Tuple<int, int>>();

  ...

  for (int forassignment = 1; forassignment <= 4; forassignment++)
    rolls.Add(Tuple.Create(rnd.Next(1, 7), rnd.Next(1, 7)));

Или вы можете создать и заполнить коллекцию за один раз с помощью Linq

  List<Tuple<int, int>> rolls = Enumerable
    .Range(1, 4)
    .Select(i => Tuple.Create(rnd.Next(1, 7), rnd.Next(1, 7))) 
    .ToList();

Теперь давайте использовать их:

  // Printing out 
  foreach (var roll in rolls)
    Console.WriteLine($"{roll.Item1} {roll.Item2}");

  // multipliernew computation
  foreach (var roll in rolls)
    if (roll.Item1 == roll.Item2)
      multipliernew = multiplier + add10;
...