Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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
Google apps script “滚动随机”问题;掷骰子;数字,然后求和值(气体)_Google Apps Script - Fatal编程技术网

Google apps script “滚动随机”问题;掷骰子;数字,然后求和值(气体)

Google apps script “滚动随机”问题;掷骰子;数字,然后求和值(气体),google-apps-script,Google Apps Script,我已经试了几个小时,想弄明白为什么我的随机“骰子”掷骰函数不会产生我想要的结果 我的翻滚功能: function roll(min, max, count) { min = Math.ceil(min); max = Math.floor(max); var result = [] for (var i = 0; i < count; i++){ result.push(Math.floor(Math.random() * max) + 1); } re

我已经试了几个小时,想弄明白为什么我的随机“骰子”掷骰函数不会产生我想要的结果

我的翻滚功能:

function roll(min, max, count) {
  min = Math.ceil(min);
  max = Math.floor(max);
    var result = []
  for (var i = 0; i < count; i++){

    result.push(Math.floor(Math.random() * max) + 1);
  }
 return result;
}
var stats = [];
var STR = roll(1,6,STRrolls);
Logger.log(STR);
STRrolls的值为3。日志如下所示:

[19-03-20 23:26:12:730GMT][1.0,3.0,5.0]

这就是我绊倒的地方。我尝试将这3个值相加,然后将其作为单个值存储在“stats”数组中,这样我也可以对其他几个数组重复这个过程

以下是我的脚本的更好示例:

function roll(min, max, count) {
  min = Math.ceil(min);
  max = Math.floor(max);
    var result = []
  for (var i = 0; i < count; i++){

    result.push(Math.floor(Math.random() * max) + 1);
  }
 return result;
}

function sumArr(array) {
  return array.reduce(function(a,b){
    return a + b
  }, 0);
}

function CHAR {
  var C_R = SpreadsheetApp.getActive().getSheetByName('Char_Ref')
  var STRrolls = C_R.getRange("F2").getValue();
  var DEXrolls = C_R.getRange("F3").getValue();
  var RESrolls = C_R.getRange("F4").getValue();
  var EMProlls = C_R.getRange("F5").getValue();
  var STArolls = C_R.getRange("F6").getValue();

  var stats = [];

var STR = roll(1,6,STRrolls);
Logger.log(STR);

var DEX = roll(1,6,DEXrolls);
var RES = roll(1,6,RESrolls);
var EMP = roll(1,6,EMProlls);
var STA = roll(1,6,STArolls);


      stats.push([STR,DEX, RES, EMP, STA])

      rangeStats.setValues(stats);
      rangeClass.setValue(CLASSval);
      rangeLevel.setValue(1);

}
功能滚动(最小、最大、计数){
min=数学单元(min);
最大值=数学楼层(最大值);
var结果=[]
对于(变量i=0;i
问题在于,运行此函数前后会产生相同的日志:

[19-03-20 17:03:13:560 PDT][3.0,1.0,4.0][19-03-20 17:03:13:561 //www.PDT][3.0,1.0,4.0]

像那样

function getSum(total, num) {
  return total + num;
}
var stats = [];
var STR = roll(1,6,STRrolls);

stats = STR.reduce(getSum);
Logger.log(STR);

您在数组中推送了每个值,但没有执行任何添加操作。

我发现这是一个有趣的问题。确定每一卷的最大值和最小值并不像人们最初猜测的那样明显

function repeatRolls(cnt) {
  var cnt= cnt || 100;
  var mindie=100000;
  var maxdie=-100000;
  var s='<style>th,td{border: 1px solid black;padding:5px;}</style><table>';
  for(var i=0;i<cnt;i++) {
    var rObj=rollTheDice(12,-12,20);
    if(i==0) {
      s+='<tr><th>Roll</th>';
      for(var k=0;k<rObj.roll.length;k++) {
        s+=Utilities.formatString('<th>Die %s</th>',k+1);
      }
      s+='<th>Sum</th></tr>';
    }
    s+=Utilities.formatString('<tr><td>%s</td>',i+1);
    for(var j=0;j<rObj.roll.length;j++) {
      s+=Utilities.formatString('<td>%s</td>', rObj.roll[j]);
      if(rObj.roll[j]>maxdie){maxdie=rObj.roll[j];}
      if(rObj.roll[j]<mindie){mindie=rObj.roll[j];}
    }
    s+=Utilities.formatString('<td>%s</td></tr>',rObj.total);
  }
  s+=Utilities.formatString('</table><br />maxdie: %s<br />mindie: %s',maxdie,mindie);
  var userInterface=HtmlService.createHtmlOutput(s).setWidth(1200);
  SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Rolling the Dice');
}
功能重复辊(cnt){
var cnt=cnt | | 100;
var mindie=100000;
var maxdie=-100000;
var s='th,td{border:1px纯黑色;padding:5px;}';
对于(var i=0;imaxdie){maxdie=rObj.roll[j];}

如果(rObj.roll[j]你尝试过的无法求和的代码在哪里?你尝试过
Array\reduce
?与你的代码相关的错误消息在哪里?你肯定在互联网上找到了其他处理数组内容求和的页面…那么当你尝试这些建议时发生了什么?嗨,@tehhowch-是的,我尝试过reduce但无法使其工作。它只返回相同的日志结果。我使用的是:函数sumArr(array){return array.reduce(函数(a,b){return a+b},0);}你听起来很沮丧(可能是错的,我是孤独症).如果我没有给出足够的细节,我会引用。我尝试过。我没有尝试过的所有不同的方法,以及它们相关的错误,因为每次它们不起作用时我都会替换它们。谢谢。我不明白为什么我会被否决。我试着寻找答案,并尝试自己去做,已经达到了我的知识极限wledge和我在寻求帮助-为什么人们对此感到恼火?:-/如果你不展示你做了什么,人们只会重复你的工作,浪费每个人的时间。在你的问题中,展示你的代码,它反映了你如何求和以及你如何看待求和。请注意,数组类方法通常不会修改源数组…谢谢,@tehhowch-我已编辑了我的问题以反映您的建议。在调用getSum函数之前和之后提供相同的日志:[19-03-20 23:50:56:079 GMT][3.0,5.0,6.0][19-03-20 23:50:56:080 GMT][3.0,5.0,6.0]
function getSum(total,num) {
  return total + num;
}

function rollTheDice(max,min,num) {
  var num = num || 6;
  var min = min || 1;
  var max = max || 6
  var roll=[];
  for (var i=0;i<num;i++){
    roll.push(Math.floor(Math.random() * (max-min+1))+min);
  }
  return {roll:roll,total:roll.reduce(getSum)};                         
}