【问题标题】:Javascript Average sumJavascript平均总和
【发布时间】:2020-04-17 17:05:48
【问题描述】:

处理一个带有两个输入字段的表单,供用户输入学生的姓名和分数,以及四个按钮,其中一个添加名称和标记,将每个值存储在控制台中。第二个在显示框中显示存储的结果,第三个按钮是清除所有,清除控制台和显示框。

第四个按钮是计算输入分数的平均值。我的问题是这些标记没有存储在下面的数组中,它们存储在用户输入的控制台中。我正在尝试将这些值存储在控制台中并计算出平均值。

<form onsubmit="return false">
    <h4>Enter student results</h4>

    Name:
    <input type="text" id="name" autofocus required>

    Mark:
    <input type="number" id="mark" min="0" max="100" required>




    <div id="buttonBlock">
        <input type="button" id="Add" value="Add Result">
        <input type="button" id="Clear" value="Clear All">
        <input type="button" id="Display" value="Display All">
        <input type="button" id="Average" value="Calculate Average">
    </div>


</form>

<p id="result"></p>
let insertName = [];
let insertMark = [];
 //Arrays//

function getTotal() {
  let total = 0;
  let count = 0;

  for (let i = 0; i < mark.length; i++) {
    total += mark.length[i];
  }

  if (mark[i] !== undefined) {
    //legit value//
    count++;
    total += mark[i];
  }

  let avg = total / count;
  console.log(avg)

  document.getElementById("result").innerHTML = " The Average is " + total;
}

document.getElementById("Average").addEventListener("click", getTotal);

【问题讨论】:

  • NaN 代表不是数字。你有没有在你的代码中设置断点来检查你有什么值?
  • 什么是mark?您有两个 i 变量。
  • mark 来自哪里,mark.length[i] 应该是什么?
  • 请添加minimal reproducible example,以便我们重现问题。
  • mark 是一个数组,但不包含数字。我正在尝试从控制台获取值来计算平均值。

标签: javascript arrays average


【解决方案1】:

你两次声明了 i

let i = 0;

for (let i = 0; i < mark.length; i++)

此代码从未执行,因为您的 mark.length 为 0

total += mark[i]; 

而且这段代码也没有被执行,因为mark[0]是未定义的

count++;
total += mark[i];

Tge avg = 0/0 是 NaN,但总还是 0

【讨论】:

  • 可能是因为在代码运行时假设mark不存在
  • @mplungjan 如果您阅读 OP 的评论“标记是一个数组,但不包含数字。”
  • I am trying to grab the values from the console to work out the average.
  • @mplungjan 试图获取值与空数组无关。 OP 已经说过数组是空的。如果数组不为空,则总计将为 NaN。
  • 你问为什么你可能会被否决,我提供了一种可能性。 OP 代码中还有其他几个问题。如果单击按钮时标记已填充,则您的不是一个
【解决方案2】:

看不到标记的来源,看看它们是否真的是数字。您可能需要解析为整数。 没有注意到你的意图。 @Niels 看到了。

mark = [1,2,3,4,5,6]

function getTotal() {
  let total = 0;
  let count = 0;
  //let i = 0;  // someone edited this to fix poor style

  for (let i = 0; i < mark.length; i++) 
    if (mark[i] !== undefined) {
      //legit value//
      count++;
      total += mark[i];
    }

  let avg = total / count;
  console.log(avg)

  document.getElementById("result").innerHTML = " The Average is " + total;
}

document.getElementById("Average").addEventListener("click", getTotal);
<button id="Average">Average</button>

<div id="result"></div>

创建了一个完整的演示。但老实说,对于像这样有一些错别字的小黑客,他真正需要的只是让它迅速指出他犯错的地方。

【讨论】:

  • 仍然没有解决,您还必须删除//合法值部分。这会产生无效的总和。
  • 但这不是一个真正的解决方案。在检查 if (mark[i] !== undefined) { 中,i 的值是 mark.length。所以count大概是0,平均计算没有意义。我不记得除以 0 是否会导致 NaN;如果是,那可能才是真正的问题。
  • 呃,为什么不呢?他显然在其他地方有代码,即 HTML 元素和标记数组的来源。现在显然他是说他通过控制台手动设置了标记数组。
  • let mark = [ ] & let name [ ] 是我为保存学生记录而创建的数组。只有它们在代码中不包含任何名称/标记,因为我试图通过用户输入使其工作,所以当用户输入学生的姓名和标记时,我有控制台来存储它。现在我只是想弄清楚如何获取用户从控制台输入的值来计算标记数组的平均值。抱歉,如果我没有提供足够的细节,这里很新
  • 哦...在那种情况下,这些人可能有一点。听起来你需要更多的指导,而且最好还是被引导自己去破解更多的东西。
猜你喜欢
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多