C#:如何将随机 int 值分配给变量?

Posted

技术标签:

【中文标题】C#:如何将随机 int 值分配给变量?【英文标题】:C#: How to assign random int values to variables? 【发布时间】:2020-07-09 21:49:57 【问题描述】:

我制作了一个骰子类,其中包含一个使用 random.next 确定 1-6 的随机 int 值的方法。

Fairdice.cs:

 class FairDice


    //defining variable and property
    private Random rnd;
    public int Current  get; private set; 
    public FairDice()
    
        rnd = new Random(Guid.NewGuid().GetHashCode());
        Current = 0;
    

    public int FRoll()
    
        Current = rnd.Next(1, 7);
        return Current;
    

RollDice.cs 具有用于打印的循环。

static class RollDice

    public static void Roll(this int count, Action action)
    
        for (int i = 0; i < count; i++)
        
           action();
        
    

Program.cs 包含这段代码,它会打印出 1-6 之间的 5 个随机值:

FairDice fd = new FairDice();
                    5.Roll(() => Console.WriteLine("Dice: " + fd.FRoll()));

问题:我希望在每个变量中分配随机值并将它们存储并保存在列表或数组中以供将来使用。

澄清:

假设它打印出数字:1, 2, 3, 4, 5 - 然后我希望为每个值分配一个变量:a = 1, b = 2, ... f = 5

和/或简单地将值存储在数组1, 2, 3, 4, 5

有什么办法吗?

【问题讨论】:

你的意思是“在每个变量中”? 可以说它打印出数字:1、2、3、4、5 - 我希望为每个值分配一个变量:a = 1、b = 2、... f = 5。 @ozsh83 【参考方案1】:

如果您想存储调用FRoll 返回的值,那么您可以执行以下操作:

FairDice fd = new FairDice();
var numbers = new List<int>();
5.Roll(() => numbers.Add(fd.FRoll()));  // Append the values to the list as we generate them
var firstNumberRolled = numbers[0]; // Access the values later
Console.WriteLine($"The first number rolled was firstNumberRolled");

【讨论】:

【参考方案2】:

将 throw 结果放入数组后,您可以根据需要提取分配变量。

class FairDice

    private static int _seed;
    private static ThreadLocal<Random> threadLocal = new ThreadLocal<Random>
        (() => new Random(Interlocked.Increment(ref _seed)));

    static FairDice()
    
        _seed = Environment.TickCount;
    

    private static Random Rng  get  return threadLocal.Value;  

    public int Roll()
    
        return Rng.Next(1, 6);
    


static class RollDice

    public static int[] Roll(this int count, FairDice dice)
    
        int[] values = new int[count];
        for (int i = 0; i < count; i++)
        
            values[i] = dice.Roll();
        
        return values;
    


class Program

    static void Main(string[] args)
    
        FairDice fd = new FairDice();
        int[] values = 5.Roll(fd);
        Console.WriteLine(String.Join(",", values.Select(x => x.ToString()).ToArray()));
    
 

【讨论】:

它按预期工作,谢谢。但是,我确实很难掌握您制作的 FairDice 课程。你愿意详细说明吗?【参考方案3】:

将此添加到 FairDice(带有“*”的行):

class FairDice
*         private int[] returnedValues;
public int FRoll()
        
            Current = rnd.Next(1, 7);
*            returnedValues[Current]++;
            return Current;
        

*public void GetreturnedValues()
*        
*            for (int i = 1; i < 7; i++)
*            
*                Console.WriteLine("0: 1", i, returnedValues[i]);
*            
*        

在此之后向您添加d.GetreturnedValues(); Program.cs 将显示不同值被抛出的次数。

【讨论】:

以上是关于C#:如何将随机 int 值分配给变量?的主要内容,如果未能解决你的问题,请参考以下文章

将字母分配给c中的int变量

将表示 SQL 查询的记录数(计数)的值分配给 C# 中的变量

C#组合框,将文本值分配给焦点丢失事件的变量?

C#中能得到随机数的函数是啥啊,怎么才能将随机输出的随机数赋给一个变量?

C# 数据类型

结构体变量 和 结构体指针