[英]Generate a unique random number between 1 and 10?
我想生成一個介於1到10之間的唯一隨機數字。如果重復輸入一個數字,則腳本應跳過該數字並嘗試另一個。 如果沒有唯一編號,則應生成一條消息。 有什么邏輯可以實現這個概念?
public int number;
void Update () {
if(Input.GetKeyDown(KeyCode.A))
{
number= Random.Range(1,10);
}
}
編輯:這不是用戶發布的鏈接的重復,因為我試圖生成唯一的數字,並且如果重復特定的數字,腳本將忽略它並嘗試尋找另一個數字。
public class RandomGenerator : MonoBehaviour
{
public int minNumber = 1;
public int maxNumber = 10;
private List<int> _validNumbers;
public int number;
private void Awake()
{
_validNumbers = new List<int>();
for (int i = minNumber; i <= maxNumber; i++)
_validNumbers.Add(i);
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
if (_validNumbers.Count == 0)
Debug.Log("No valid Numbers");
else
number = GetRandomNumber();
}
}
private int GetRandomNumber()
{
var nextIndex = Random.Range(0, _validNumbers.Count - 1);
var result = _validNumbers[nextIndex];
_validNumbers.RemoveAt(nextIndex);
return result;
}
}
編輯后的評論:
這個問題與另一個問題非常相似。 但是Unity.Random與System.Random不同。
其他問題中提供的答案也可以在這里使用。 但是我們在這里有更多選擇。
正如大家在評論中建議的那樣,改組可能有效:
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;
}
}
為了完整起見,添加MonoBehaviour
,例如
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");
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.