我做了一个类RandomNumber
,当它被初始化时,它被赋予一个数字数组作为输入。
这个数组存储在构造函数中
constructor(numbers) {
this.numbers = numbers.slice();
}
我想在类nextNumber
中创建一个函数,当调用时,总是给出下一个数字,这与前一个不同
。例如:0,1,0,1,0,1,0 将是如果一个数组已向班级提供了输入[0, 1]
但我的代码无法正常工作。出于某种原因,它1
从不重复,并且经常为 0(并且数字根本不应该重复)
class RandomNumber {
constructor(numbers) {
this.numbers = numbers.slice();
}
random(numbers) { // генерация рандомного числа на основе длины массива
const randomIdx = Math.floor(Math.random() * numbers.length);
const randomNumber = numbers[randomIdx];
return {num: randomNumber, idx: randomIdx};
};
nextNumber() {
const numbers = this.numbers.slice();
let randomNumber = this.random(numbers);
if (this.lastRdnNumber && this.lastRdnNumber.num === randomNumber.num) {
// this.lastRdnNumber cуществует и прошлое число равняется текущему сгенерированному
numbers.splice(this.lastRdnNumber.idx, 1); // вырезать число из массива, которое уже было
randomNumber = this.random(numbers);
}
this.lastRdnNumber = randomNumber;
return randomNumber.num;
}
}
const numbers = [1, 0];
const randomNumber = new RandomNumber(numbers);
for (let i = 0; i < 30; i++) {
console.log(randomNumber.nextNumber());
}
根据建议
@wololo
,有必要删掉我想出的数字,而不是过去: