【问题标题】:Make sure a sum is asked only once (js)确保只询问一次总和(js)
【发布时间】:2017-02-23 13:07:52
【问题描述】:

我有一个乘法游戏,我想要一个随机数 12 次,但是如果没有重复一个数字,我怎么能得到它。这是我尝试过的,但我不断返回“未定义”。 (我使用的是 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();

当我不断调用此函数时,它开始返回“未定义”。任何解决方案?谢谢 :)

【问题讨论】:

  • 用户数组来存储你的变量请不要写20行代码你可以写3...
  • 我建议使用一个数组来保存使用过的数字,只要你发现你生成的数字已经在那个使用过的数字数组中,就一直生成一个随机数
  • 一个词...循环!
  • @ZakTheHat 你试过什么?向我们展示您尝试过什么但没有奏效

标签: javascript html undefined


【解决方案1】:

代码应该是不言自明的,主要是你必须使用数组来跟踪使用的数字。

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());

【讨论】:

  • 我已经实现了你的代码,但最后我的浏览器崩溃了。
  • 不抱歉,那是我的代码。
  • 那是因为你造成了一个死循环。请注意我只调用了 5 次 getUnusedRandomNumber,而 maxNumber 也是 5。当您使用完所有数字时,while 循环将无限运行,导致您的浏览器冻结和崩溃。
  • @ZakTheHat,如果它解决了您的问题,请不要忘记接受答案。
【解决方案2】:

更简洁的代码是生成不重复的随机数

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 2011-01-02
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    相关资源
    最近更新 更多