2017-03-08 73 views
0

我有以下的隨機數創:隨機數連續不重複相同的值

val = rnd.Next(1, 4)+1; 

我已經看過該網站上類似的問題,我相信+1是爲了防止獲得相同數量的連續。

我想序列是隨機的,但我不希望連續兩次相同的值。例如:

1,1,2,2,3,4會錯,但1,2,1,2,3,4,3會滿足我的需求。

我嘗試以下,但它並沒有解決我的問題:

void numLogic() 
{ 
    System.Random rnd = new System.Random(); 
    int val; 
    int oldval = val; 
    val = rnd.Next(1, 4)+1; 
    while (oldval == val) 
    { 
    val = rnd.Next(1, 4) + 1; 
    } 
} 

注意,通過統一的物體碰撞產生的每個數字後numLogic()調用成功。問題不在遊戲對象,這工作正常。我只是不希望連續兩個數字相同。

+1

+1所做的唯一的事情是讓你的範圍2-4而不是1-3。 –

回答

1
int val; 
int oldval = val; 

這套oldval = 0;

您將需要保存您的VAL功能外

static int lastVal; 
void numLogic() 
{ 
    var val = rnd.Next(1, 4)+1; 
    while (lastVal== val) 
     { 
      val = rnd.Next(1, 4) + 1; 
     } 
     lastval = val; 
} 
+1

這有點過時了,但這是「do ... while」用例的完美例子。 – Forklift

1

+1rnd.Next(1,4)是沒有必要的。只需更改爲rnd.Next(2,5)即可實現相同效果。 (但我想你不想要這個?)

你的問題功能是:你只生成一個數字。 oldval應該是您的函數之外的變量,並存儲最後一次函數調用的值。例如:

int oldrnd = 0; 
int nextRandom() { 
    int val = rnd.Next(1,4); 
    while(oldrnd == val) val = rnd.Next(1,4); 
    oldrnd = val; 
    return val; 
} 
0

+1不會阻止連續獲取相同的數字。 這是防止得到零(通過移動範圍一)。

using System; 
class Program 
    { 
     static void numLogic() 
    { 
     int val; 
     int oldval ;//= val; 
     Random rnd = new Random(); 
     val = rnd.Next(1, 4)+1; 
     oldval=val; 
     int numberOfNumbers = 7; 
     int i=0; 
     while (i<numberOfNumbers) 
      { 
       val = rnd.Next(1, 4) + 1; 
       if(oldval==val)continue; 
       oldval=val; 
       Console.Write("{0} ",val); 
       i++; 
      } 
    } 
     static void Main(string[] args) 
     { 
      numLogic(); 

     } 
    } 
0

沒有必要對rnd.next一個循環來避免該問題:後初始隨機(1,4),環上VAL =隨機(1,3),並添加1〜VAL VAL時> = OLDVAL。

System.Random rnd = new System.Random(); 
List<int> nums = new List<int>() ; 
int ListCount = 10 ; // expected length of the sequence 
int val = rnd.Next(1, 4)+1; 
nums.Add(val)   
for (int i=1;i<ListCount;i++) 
    nums.Add((val=rnd.Next(1,3)+1)<nums[i-1] ? val : val+1) ;