我正在尝试创建一个六个数组,并且它不能包含从1到60的任何重复数字。
我的代码现在是这样的:
//a[not(.//*[not(self::b)]//c)]//c[not(.//*)]
它应该检查数组是否有多于0个元素,如果它有,它将清空它。 如果它是空的,它将组装阵列...... 它不应该重复数字...... 这可以解决我插入重复检查器的问题..:
jogar(){
if(this.random.length != 0){
this.random=[];
}else{
for(var u=0; u<6; u++){
this.y = Math.ceil(Math.random()*59+1);
for (var r of this.random){
if(r != this.y){
this.random.push(this.y);
};
};
};
this.random.sort(function(a, b){return a-b});
return this.random;
};
};
这家伙让我的代码停止工作。
在搜索之后我读了一些关于Fisher-Yates Shuffle技术的内容,但它似乎对我没用。
我正在使用角度2,使用Ionic 2框架。
这里有人已经提出这个吗?
答案 0 :(得分:1)
那句话错了,因为
for(var r of this.random)
if(r != this.y){
this.random.push(this.y);
};
每次随机数组中的数字与this.y
数字不同时,会尝试将this.y
数字推送到随机数组。
正如您在此working plunker中所看到的,您可以使用以下代码实现您所需的目标:
import { Component } from '@angular/core';
@Component({...})
export class HomePage {
random: Array<number> = [];
public jogar(): Array<number> {
if(this.random.length != 0) {
this.random=[];
}
while (this.random.length < 6) { // <- Use while instead of for
let randomNumber = this.getRandomNumber(); // Get a random number
if(!this.wasAlreadyAdded(randomNumber)) {
this.random.push(randomNumber); // Add it if it doesn't exist in the array
}
}
this.random.sort(function(a, b){return a-b});
return this.random;
}
private getRandomNumber(): number {
return Math.ceil(Math.random()*59+1);
}
private wasAlreadyAdded(randomNumber: number): number {
return this.random.indexOf(randomNumber) !== -1;
}
}
答案 1 :(得分:1)
这是我的代码现在看起来的样子。工作!
jogar(){
this.final = [];
this.numeros = [];
for(var i=0;this.final.length<6;i++){
this.final = this.numberSelect.map(Number).concat(this.numeros);
var novoNumero=Math.floor((Math.random()*59)+1);
var verificacao=this.confereSeArrayContemItem(this.final,novoNumero);
if(verificacao!==1){
this.numeros.push(novoNumero);
}else{
i--;
}
this.final.sort(function(a,b){return a-b});
}
console.log(this.final.sort(function(a,b){return a-b}));
}
confereSeArrayContemItem(array, item){
var resultado = 0;
for(var i=0;i<array.length;i++){
if(array[i]===item){
resultado =1;
}
}
return resultado;
}