Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 灵活运用数学_Javascript_String_Random_Operators - Fatal编程技术网

Javascript 灵活运用数学

Javascript 灵活运用数学,javascript,string,random,operators,Javascript,String,Random,Operators,我想创建一个4个字母长的字符串,随机包含字符串中的任何字母:“ROYGBV” 我所做的是: function generateSolution(){ var colors = "ROYGBV"; var str = ""; for (var i=0; i<4; i++) { var loc = Math.ceil( Math.random()*colors.length ); str += colors.charAt(loc);

我想创建一个4个字母长的字符串,随机包含字符串中的任何字母:“ROYGBV”

我所做的是:

function generateSolution(){
    var colors = "ROYGBV";
    var str = "";
    for (var i=0; i<4; i++) {
        var loc = Math.ceil( Math.random()*colors.length );
        str += colors.charAt(loc);
    }

    return str;
}
我在解决方案中使用Math.ceil来防止随机浮动,比如4.333123等等。在不舍入随机数的情况下,这个解决方案是如何工作的

另外,
|
操作符是什么意思?第二个解决方案中的随机化实际上是如何工作的?

您想要的是
Math.floor()
而不是
Math.ceil()
。Javascript数组是以零为基础的,因此您希望值介于0和5之间。

The
是。由于JavaScript中的逐位运算只能处理32位整数,因此这是一种将数字四舍五入到0的简捷方法。在您的情况下,它相当于:

colors.charAt(Math.floor((Math.random() * 6)));
需要对数字进行汇总,而不是进行四舍五入,因为您当前正在使用
ceil
,否则将丢失数组的第一个元素(索引为0)

以下是从中转换为整数的完整详细信息:

生产A:A@B,其中@是上述生产中的一个位运算符,其计算如下:

  • 设lref为计算A的结果
  • 设lval为GetValue(lref)
  • 设rref为评估B的结果
  • 设rval为GetValue(rref)
  • 让lnum为32(左心室)
  • 让rnum为32(rval)
  • 返回将按位运算符@应用于lnum和rnum的结果。结果是一个有符号的32位整数
  • 试试这个

    function generateSolution() {
        var colors = "ROYGBV",
            str = "",
            l = colors.length,
            i = 0;
    
        while (i < 4) {
            var loc = Math.floor(Math.random() * l);
            str += colors.charAt(loc);
    
            i += 1;
        }
    
        return str;
    }
    
    console.log(generateSolution());
    
    函数生成解决方案(){
    var colors=“ROYGBV”,
    str=“”,
    l=颜色。长度,
    i=0;
    而(i<4){
    var loc=数学地板(数学随机()*l);
    str+=颜色。字符(loc);
    i+=1;
    }
    返回str;
    }
    log(generateSolution());
    


    你需要Math.floor,|只是执行32位floor的一种按位方法

    @frrlod:你为什么在收到答案后要对问题进行如此多的更改?我想强调问题的第二部分,但你是对的。感谢您的编辑。
    |
    不是地板的简写,它是向零进位的简写,使用NaN和Infinity->0。很抱歉造成混淆,这完全回答了我的问题。
    function generateSolution() {
        var colors = "ROYGBV",
            str = "",
            l = colors.length,
            i = 0;
    
        while (i < 4) {
            var loc = Math.floor(Math.random() * l);
            str += colors.charAt(loc);
    
            i += 1;
        }
    
        return str;
    }
    
    console.log(generateSolution());