請問我依照陣列的長度,可以生成0-5之間的整數亂數,
但我想要產生連續不一樣的整數,請問該怎麼做?
例如第一個數字生成0 , 第二個數字不能為0 , 但第三個數字可以為0 ,但下一個數字不能為0
var right = ['a','b','c','d','e'];
var left = parseInt(Math.random() * right.length);
console.log(left);
利用取餘數的方式,可以保證不跟前一個一樣,這樣就不需要迴圈了
//不與前一個數字重複的函數
let getNextRand = (function () {
let randomVal = Math.floor(Math.random() * 5);
return function () {
//透過 +1 ~ +4 後對 5 取餘數就不會重複了
randomVal = (Math.floor(Math.random() * 4) + 1 + randomVal) % 5;
return randomVal;
}
})();
//以下為測試
let testResult = [];
for (let i = 0; i < 20; ++i) {
testResult.push(getNextRand());
}
console.log(testResult.join());
不好意思 想請問0 - 10之間 也可以這樣做嗎
我是想要每次輸出都不一樣 , 不想要放置到陣列中
這樣嗎?
我測試那邊只是用陣列暫存結果再一次輸出而已
只是要取亂數呼叫 getNextRand
就可以了
//亂數函數產生器
function createMyRand(n) {
let randomVal = Math.floor(Math.random() * n);
return function () {
//透過 +1 ~ +n-1 後對 n 取餘數就不會重複了
randomVal = (Math.floor(Math.random() * (n - 1)) + 1 + randomVal) % n;
return randomVal;
}
}
//產生 0 ~ 9 的亂數產生器
let getNextRand = createMyRand(10);
//以下為測試
for (let i = 0; i < 50; ++i) {
console.log(getNextRand());
}
var right = ['a','b','c','d','e'];
var previous = -1; //開一個新的變量判斷
var left = parseInt(Math.random() * right.length);
while( left == previous ){
left = parseInt(Math.random() * right.length);
}
console.log(left);
previous = left; //更新Previous
用C#寫個概念...語法不一定對
List<int> list = new List<int>();
for(int i=0 ; i<5 ; i++)
{
if (i==0)
{
List[i] = random(); //隨機取得0~9其中一數
}
else
{
List[i] = random();
while( List[i]!= List[i-1] ) //當目前值與上一個值不同時才跳出迴圈
{
List[i] = random();
}
}
}
有很多更好的寫法,我懶得想太多,給你個想法~