2017-08-17 90 views
5

Próbuję utworzyć generator liczb losowych, który generuje ciąg liczb od 1 do 9, a jeśli generuje 8, powinien wyświetlić 8 ostatnich, a następnie przestań generować.Losowa liczba w pętli do-while z instrukcją if

Do tej pory wypisuje 1 2 3 4 5 6 7 8, ale nie generuje losowego ciągu liczb, więc muszę wiedzieć, jak sprawić, by pętla rzeczywiście generowała liczby losowe, jak podano powyżej, dzięki za pomoc !

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 'jest Twoja przyjaciel. – tilz0R

+0

Twoja logika wygląda wadliwie. – ABcDexter

Odpowiedz

4

Można to zrobić w prostszy sposób:

Rozwiązaniem jest push losowy wygenerowany numer do jednej tablicy, a następnie użyć join metodę w celu przyłączyć wszystkie elementy tablicy pożądany ciąg.

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

wielkie dzięki! Zapomniałem o tablicach i takich. – hannacreed

+0

@hannacreed, nie ma za co. –

1

print() jest funkcją, która celem jest, aby wydrukować dokument, należy użyć console.log(), aby wyświetlić w konsoli.

Put wartość logiczną przed pętli, na przykład var eightAppear = false

Twój stan wyglądać do {... }while(!eightAppear)

Następnie wewnątrz pętli wygenerować losową liczbę między 0 a 9. Math.floor(Math.random()*10) Concat swojej ciąg. Jeśli numer jest 8 zmiana wartości eightAppear do true

Ponieważ wydaje się być ćwiczenia, dam ci go zakodować, nie powinno być trudne teraz :)

1

Nie dlatego, że jest lepiej, ale ponieważ możemy (i lubię generatory :)), alternatywny z iterator (wymagane ES6):

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

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