【问题标题】:Perfect Randomizer完美随机化器
【发布时间】:2023-03-14 00:02:01
【问题描述】:

我正在尝试制作一个数组,将其随机播放,然后按顺序遍历它。但是,当我不止一次洗牌(START)时,它就搞砸了!此外,当您到达随机数组中的最后一个数字时,它也会混乱!请帮忙,谢谢!

JS

var minnum = 1;
var maxnum = 104;

function start() {
  var nums = [];

  while(minnum < maxnum+1){
    nums.push(minnum++);
  }

  function shuffle(o) {
    for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
    return o;
  }

  var randomnum = shuffle(nums);
  document.getElementById('txt').innerHTML = randomnum;
  localStorage["nums"] = JSON.stringify(randomnum);
  localStorage.setItem("current", 0);

}

function Link() {
  if (localStorage.getItem("current") === null || localStorage.getItem("nums") === null) {
    start();
  }

  var current = localStorage.getItem("current");
  var nums = JSON.parse(localStorage["nums"]);
  document.getElementById('txt').innerHTML = nums;
  document.getElementById('txt1').innerHTML = nums[current];
  current++;

  if(current > 103) {
    location.reload();
    start();
    current = 0;
  }
  localStorage.setItem("current", current);
}

HTML

<body>
  <input type="button" onclick="start()" value="Start" />
  <span id="txt"></span>
  <input type="button" onclick="Link()" value="Next" />
  <span id="txt1"></span>
</body>

【问题讨论】:

  • “它搞砸了”到底是怎么回事?你得到什么结果或错误,你期望什么?
  • @Andy:不幸的是你在修复时出错了:函数 shuffle 在 inside start 函数中! (我的意思是,在原始代码中)有一个 while 就在那里搞砸了一切
  • 在任何情况下,错误可能是 minnum 和 maxnum 被声明在 start 函数之外,所以如果你再次运行它将无法工作,因为 minnum 已经是 103。jsfiddle.net/1pd18eun/1跨度>
  • 不@Andy,不是,只是缩进不好!如果您想从小提琴中获取代码,我已经修复了它,但没有错误,只是在 start 函数之外缩进和 minnum 和 maxnum 错误
  • 擦眉毛。谢谢,@briosheje。

标签: javascript arrays random shuffle


【解决方案1】:

错误似乎是 minnum AND maxnumstart() 函数之外声明,并且不再初始化为 1 和 104,因此每当你点击 start 第二次第一个while不会向nums数组推送任何东西,因为minnum是103(来自上一个周期)和maxnum是104。

小提琴:

http://jsfiddle.net/1pd18eun/1/

代码(只是将 minnum 和 maxnum 移到里面):

function start()
{
var minnum = 1;
var maxnum = 104;

var nums = [];
    while(minnum < maxnum+1){
        nums.push(minnum++);
    }
    var randomnum = shuffle(nums);
    document.getElementById('txt').innerHTML = randomnum;
    localStorage["nums"] = JSON.stringify(randomnum);
    localStorage.setItem("current", 0);
}

function shuffle(o) {
    for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
    return o;
}

function Link()
{
    if (localStorage.getItem("current") === null || localStorage.getItem("nums") === null) {
        start();
    }
    var current = localStorage.getItem("current");
    var nums = JSON.parse(localStorage["nums"]);
    document.getElementById('txt').innerHTML = nums;
    document.getElementById('txt1').innerHTML = nums[current];
    current++;
    if(current > 103)
    {
        location.reload();
        start();
        current = 0;
    }
localStorage.setItem("current", current);
}

此外,为了读者和好人,开始缩进你的代码,很难正确理解你在做什么。

【讨论】:

    猜你喜欢
    • 2014-04-15
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多