我需要另一种方法来使用数组和随机生成器对其进行编码

时间:2017-03-07 23:04:12

标签: javascript html css arrays random

此代码的目的是创建一个随机选择的100个块对象的数组,但我不确定此代码是否可行

    var array_result = ();

    for( let i= 0; i<100; i++){
      var number=  parseInt (7* Math.Random());
      switch (number) {
        case 0:
          array_result.push (new Dirt ());
          break;
        case 1:
          array_result.push (new CobbleStone ());
          break;
        case 2:
          array_result.push (new sand ());
          break;
        case 3:
          array_result.push (new IronOre ());
          break;
        case 4:
          array_result.push (new Gravel ());
          break;
        case 5:
          array_result.push (new Coal ());
          break;
        case 6:
          array_result.push (new RedStone ());
          break;
        case 7:
          array_result.push (new CraftingTable ());
          break;
      }
    }

    console.log(array_result)

5 个答案:

答案 0 :(得分:1)

首先,你的间隔永远不会达到7,因为 random()会在&lt; 0,1)之间产生结果。此外, parseInt()解析一个字符串并返回第一个数字整数,因此在我看来,最好使用不同的东西。

试试这个:

//random number in closed interval (includes its endpoints)
function getRndInteger(min, max) {
  return Math.floor(Math.random() * (max - min)) + min;
}

var number = getRndInteger(0, 7);

答案 1 :(得分:0)

在Javascript中,使用Math.random()代替Math.Random()

你的parseInt调用应该包含10的基数。在这种情况下你不会遇到任何意外的结果,因为你只有8个块对象,但最好还是指定它(否则parseInt可能会尝试将值解析为八进制而不是十进制值。)

您拥有的代码永远不会生成案例7,因为Math.random生成的数字范围为0(含)到1(不包括)。

要解决这些问题,请更改:

var number = parseInt(7* Math.Random());

var number = parseInt(8 * Math.random(), 10);

此外:

要定义数组,请使用方括号而不是括号:

var array_result = [];

答案 2 :(得分:0)

以下是我看到的问题:

  1. var array_result =();改为

    var array_result = [];

  2. Math.random()返回一个介于0和1之间的整数。使用您拥有的代码,获取案例7的唯一方法是,如果math.random返回1.这是因为parseInt(6.99999)将返回6 。改为

    var number = parseInt(8 * Math.Random());

  3. 使用math.random(),无资本R

答案 3 :(得分:0)

更具说明性的方法:

const factories = [
    () => new Dirt(),
    () => new Cobblestone(),
    () => new Sand(),
    () => new IronOre(),
    () => new Gravel(),
    () => new Coal(),
    () => new RedStone(),
    () => new CraftingTable()
];

const getRandomNumber = ( maxNumber ) => parseInt(maxNumber * Math.random(), 10);

const getRandomFromArray = ( items ) => items[getRandomNumber(items.length)];

const getSomeItems = ( howMany, factories ) => new Array(howMany).map(() => getRandomFromArray(factories)());   

const array_result = getSomeItems(100, factories));

答案 4 :(得分:0)

这里有一个简洁的方法,在没有开关的情况下打开数字,给定1个输入和1个输出:

function createObject(typeId) {
    return new [ 
        Dirt, CobbleStone, Sand, IronOre, Gravel, Coal, RedStone, CraftingTable
    ][typeId] || Error;
}

您甚至可以在外部定义/修改数组以实时编辑分配,这与使用开关的怪物有关。它也比switch更快,因为它在找到匹配项之前不会评估每个条件:它会直接跳转到正确的槽并实例化该槽中构造函数所指定类型的新对象。

除了性能之外,我喜欢这种模式,因为它干净,易读且易于维护。