1 回答

TA贡献2021条经验 获得超8个赞
我重写了代码,因为我认为类和类之外的代码组合太多,这会产生很多依赖(恕我直言)。
在这段代码中,您创建一个类并说出您想要生成多少个数字,然后调用该generate()方法为您完成所有工作。
为了检查之前是否使用过这些数字,我将数字编码到一个位字段并存储它(该encode()方法只是根据使用的数字添加二进制数字)。如果同样的模式再次发生,它只会尝试另一个模式。
class NumberGenerator{
private $numbersUsed = [];
private $basket = [];
private $numbersToGenerate = 0;
public function __construct( int $numbersToGenerate ) {
$this->numbersToGenerate = $numbersToGenerate;
}
public function generate(){
$numbers = range(0,9);
for ( $i = 0; $i < $this->numbersToGenerate; $i++ ) {
do {
shuffle($numbers);
$number = array_slice($numbers, 0,3);
$encoded = $this->encode($number);
}
while ( in_array($encoded, $this->numbersUsed) );
$this->basket[] = implode($number);
$this->numbersUsed[] = $encoded;
}
return $this->basket;
}
protected function encode(array $num) {
$numbers = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512];
$sum = 0;
foreach ( $num as $digit ) {
$sum += $numbers[$digit];
}
return $sum;
}
}
$generator = new NumberGenerator(120);
print_r($generator->generate());
- 1 回答
- 0 关注
- 164 浏览
添加回答
举报