-3

I have a multiplication game and I want a random number 12 times but how can I get that without it getting a number repeated. This is what I've tried but I keep getting 'Undefined' returned. (I'm using Firefox 51.0.1)

$(".input").val("");
var numbers_used = [];
var current_number = 0;
var max_num = 12;
var base_number = parseInt(prompt("Enter which table you want to practice.", "5"));
var maxScore = 12;
var questionsAnswered = 0; 
var questionsAnsweredCorrect = 0;
var questionsAnsweredWrong = 0;
var asked1 = false;
var asked2 = false;
var asked3 = false;
var asked4 = false;
var asked5 = false;
var asked6 = false;
var asked7 = false;
var asked8 = false;
var asked9 = false;
var asked10 = false;
var asked11 = false;
var asked12 = false;

function new_random_number() {
    var new_current_number = Math.round(Math.floor((Math.random() *     max_num) + 1)); 
    return new_current_number;
}

function overallNumber() {
current_number = new_random_number();

if((current_number == 1 && !asked1) ||
   (current_number == 2 && !asked2) ||
   (current_number == 3 && !asked3) ||
   (current_number == 4 && !asked4) ||
   (current_number == 5 && !asked5) ||
   (current_number == 6 && !asked6) ||
   (current_number == 7 && !asked7) ||
   (current_number == 8 && !asked8) ||
   (current_number == 9 && !asked9) ||
   (current_number == 10 && !asked10) ||
   (current_number == 11 && !asked11) ||
   (current_number == 12 && !asked12) 
  ){

   if(current_number == 1)
    asked1 = true;

    if(current_number == 2)
    asked2 = true;

    if(current_number == 3)
    asked3 = true;

    if(current_number == 4)
    asked4 = true;

    if(current_number == 5)
    asked5 = true;

    if(current_number == 6)
    asked6 = true;

    if(current_number == 7)
    asked7 = true;

    if(current_number == 8)
    asked8 = true;

    if(current_number == 9)
    asked9 = true;

    if(current_number == 10)
    asked10 = true;

    if(current_number == 11)
    asked11 = true;

    if(current_number == 12)
    asked12 = true;

    return current_number;


} else overallNumber();

When I continuously call this function it just starts returning 'Undefined'. Any Solutions? Thx :)

Zak The Hat
  • 317
  • 1
  • 5
  • 15

2 Answers2

1

The code should be self-explanatory, main thing is that you have to keep track of the used numbers using an array.

var number;
var maxNumber = 5;
var usedNumbers = [];

function getUnusedRandomNumber(){
    // keep generating a random number, until you find one that has not been used
    do{
      var randomNumber = getRandomNumber();
    }
    while(usedNumbers.indexOf(randomNumber) != -1);
    
    // store used numbers into array
    usedNumbers.push(randomNumber);
    return randomNumber;
}

function getRandomNumber() {
    var randomNumber = Math.round(Math.floor((Math.random() *     maxNumber) + 1)); 
    return randomNumber;
}

alert(getUnusedRandomNumber());
alert(getUnusedRandomNumber());
alert(getUnusedRandomNumber());
alert(getUnusedRandomNumber());
alert(getUnusedRandomNumber());
Swimburger
  • 6,681
  • 6
  • 36
  • 63
0

A more condensed code is to generate random number without repetition is

var nums = [], numsLen = 12, maxNum = 12, num;
while (nums.length < numsLen) {
    num = Math.round(Math.random() * maxNum);
    if (nums.indexOf(num) === -1) {
        nums.push(num);
    }
}
console.log(nums);
shubham agrawal
  • 3,435
  • 6
  • 20
  • 31