如果 Mean = Mode 则应显示 1,否则应显示 0 的代码故障排除

Posted

技术标签:

【中文标题】如果 Mean = Mode 则应显示 1,否则应显示 0 的代码故障排除【英文标题】:Troubleshooting a code that is supposed to display 1 if Mean = Mode and 0 if it does not 【发布时间】:2021-10-12 00:08:41 【问题描述】:

我是一个新手编码器,我正在尝试编写一个代码,如果平均值等于众数则返回 1,否则返回 0。到目前为止,我编写的代码只返回 0,即使它应该是 1。任何帮助或指出我出错的地方的提示将不胜感激!

function ArrayChallenge(arr)  
let sum = 0
let totalNum = arr.length
let mean = sum/totalNum
for (i=0; i < arr.length; i++) 
  if (arr[i] > 0) 
    sum+= arr[i]
  


const numList = 
arr.forEach(elem => numList[elem] = numList[elem] + 1 || 1)
let mode = []
let numMax = 0
for (const key in numList) 
  if(numList[key] > numMax) 
    mode = [Number(key)]
    numMax = numList[key]
   else if (numList[key] === numMax) 
    mode.push(Number(key))
  

if (mode.length === Object.keys(numList). length) mode = []
if (mean === mode) 
  return 1
 else return 0
 

【问题讨论】:

Mode 似乎是一个数组,而 mean 是一个数字。所以他们永远不可能相等 调试提示:什么您认为应该相等的值? 【参考方案1】:

let mean = sum/totalNum 应该在 for 循环之后,以便填充 sum

for (i=0; i < arr.length; i++) 
    if (arr[i] > 0) sum+= arr[i]

let mean = sum/totalNum

当您分别检查返回 1 或 0 时,会进行故障比较, 因为mean 是一个数字,mode 是一个数组。因此,通过添加 mode.length,您将获得数组的实际长度(数字),现在您可以进行比较。

if (mean === mode.length) 
  return 1
 else return 0
 

结果: 根据您的代码,测试数据的行为将是:

//ArrayChallenge([10,10,10]) -> 0
//ArrayChallenge([0,0,0]) -> 1

请注意,上述结果是假设您要检查模式的长度时得出的。如果您能用更多信息描述问题,那就太好了。

【讨论】:

以上是关于如果 Mean = Mode 则应显示 1,否则应显示 0 的代码故障排除的主要内容,如果未能解决你的问题,请参考以下文章

颤振:如何显示用户特定的页面?

除非使用 PySide 恰好选择了一项,否则禁用菜单项

JS中的猜数字游戏

在设置Root Page Ionic之前检查Auth

执行智能合约时的 Solidity 错误消息:“如果您发送价值,则应支付被调用的函数......”

使用 Angular2 启用/禁用复选框字段