2017-08-17 1 views
5

J'essaie d'obtenir un générateur de nombres aléatoires qui génère une chaîne de nombres entre 1 et 9, et s'il génère un 8, il devrait afficher le 8 dernier et ensuite arrêter de générer.Nombre aléatoire dans une boucle do-while avec l'instruction if

Jusqu'à présent, il imprime 1 2 3 4 5 6 7 8, mais il ne génère pas une chaîne de nombres aléatoires, donc je dois savoir comment générer des nombres aléatoires comme indiqué ci-dessus, merci pour toute aide !

Javascript

// 5. BONUS CHALLENGE: Write a while loop that builds a string of random 
integers 
// between 0 and 9. Stop building the string when the number 8 comes up. 
// Be sure that 8 does print as the last character. The resulting string 
// will be a random length. 
print('5th Loop:'); 
text = ''; 

// Write 5th loop here: 
function getRandomNumber(upper) { 
    var num = Math.floor(Math.random() * upper) + 1; 
    return num; 

} 
i = 0; 
do { 
    i += 1; 

    if (i >= 9) { 
     break; 
    } 
    text += i + ' '; 
} while (i <= 9); 


print(text); // Should print something like `4 7 2 9 8 `, or `9 0 8 ` or `8 
`. 
+3

'Math.ceil (Math.random() * 7) + 1' est votre ami. – tilz0R

+0

Votre logique semble défectueuse. – ABcDexter

Répondre

4

Vous pouvez le faire d'une façon plus simple façon:

La solution est de push le nombre généré au hasard dans un tableau et puis utilisez la méthode join pour joindre tous les éléments du tableau la chaîne souhaitée.

function getRandomNumber(upper) { 
 
    var num = Math.floor(Math.random() * upper) + 1; 
 
    return num; 
 
} 
 
var array = []; 
 
do { 
 
    random = getRandomNumber(9); 
 
    array.push(random); 
 
} while(random != 8) 
 
console.log(array.join(' '));

+1

merci beaucoup! Oublié les tableaux et autres. – hannacreed

+0

@hannacreed, de rien. –

1

print() est une fonction dont le but est d'imprimer un document, vous devez utiliser console.log() pour afficher dans la console.

Mettez un booléen avant votre boucle, par exemple var eightAppear = false

Votre état maintenant ressembler à do {... }while(!eightAppear)

Ensuite, dans votre boucle générer un nombre aléatoire entre 0 et 9. Math.floor(Math.random()*10) Concat votre chaîne. Si le nombre est 8 valeur de changement de eightAppear à true

Comme il semble être un exercice, je vais vous laisser coder, ne devrait pas être difficile maintenant :)

1

Non pas parce qu'il est mieux, mais parce que nous pouvons (et j'aime générateurs :)), une alternative avec une fonction iterator (ES6 nécessaire):

function* getRandomNumbers() { 
 
    for(let num;num !==8;){ 
 
    num = Math.floor((Math.random() * 9) + 1); 
 
    yield num;  
 
    } 
 
} 
 

 
let text= [...getRandomNumbers()].join(' '); 
 
console.log(text);