C# 生成一个介于1和10之间的唯一随机数?
我想生成一个介于1和10之间的唯一随机数字。如果某个数字重复出现,则脚本应跳过该数字并尝试另一个数字。如果没有留下唯一的号码,则应生成一条消息。实现这一概念的逻辑是什么C# 生成一个介于1和10之间的唯一随机数?,c#,unity3d,C#,Unity3d,我想生成一个介于1和10之间的唯一随机数字。如果某个数字重复出现,则脚本应跳过该数字并尝试另一个数字。如果没有留下唯一的号码,则应生成一条消息。实现这一概念的逻辑是什么 public int number; void Update () { if(Input.GetKeyDown(KeyCode.A)) { number= Random.Range(1,10); } } 编辑:它不是用户发布的链接的副本,因
public int number;
void Update () {
if(Input.GetKeyDown(KeyCode.A))
{
number= Random.Range(1,10);
}
}
编辑:它不是用户发布的链接的副本,因为我正在尝试生成唯一编号,如果某个特定编号重复,脚本将忽略该编号并尝试查找其他编号
公共类随机生成器:单行为
{
public int minNumber=1;
公共整数maxNumber=10;
私有列表有效编号;
公共整数;
私人空间
{
_ValidNumber=新列表();
对于(inti=minNumber;i,正如大家在评论中建议的那样,洗牌可能会奏效:
public class Shuffler
{
private readonly Queue<int> _queue;
public Shuffler(int max)
{
_queue = new Queue<int>(Enumerable.Range(1, max).OrderBy(x => UnityEngine.Random.value));
}
public bool TryGetNext(out int item)
{
if(_queue.Count == 0)
{
item = -1;
return false;
}
item = _queue.Dequeue();
return true;
}
}
洗牌的可能重复会更符合逻辑。创建一个1..10
值的集合,洗牌,然后在所有项都被取下时从中取出1st、2nd、…、10th
项生成消息可能不重复的重复。非常相似,但Unity Random的行为不同于System Random。工作原理类似于c有害!似乎您将“此其他问题”链接到此问题。感谢您的评论。刚刚更新了链接:
public class RandomNumber : MonoBehaviour
{
private Shuffler _shuffler;
public int number;
private void Awake()
{
_shuffler = new Shuffler(10)
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
if(!_shuffler.TryGetNext(out number))
{
Debug.Log("No valid Numbers");
}
}
}
}