【问题标题】:If clauses in for loop acts weird [closed]for 循环中的 if 子句行为怪异[关闭]
【发布时间】:2016-10-26 18:37:12
【问题描述】:

我有一个功能,它收集输入的答案并检查收集的答案是否与解决方案相同。问题是随机提问的。问题和解决方案位于单独的 .txt 文件中。

我有一个包含一些单词的文件,如果列表中的最后一个单词被正确回答,即使其他问题的其他答案是正确的,程序也总是满足它的条件。

有什么建议吗?

var besedeNemske = ["glava", "voda", "drevo"];
var besedePrevod = ["der Kopf", "das Wasser", "der Baum"];


window.onload = function() {
  var fileInput = document.getElementById('fileInput');
  var fileDisplayArea = document.getElementById('fileDisplayArea');

  fileInput.addEventListener('change', function(e) {
    var file = fileInput.files[0];
    var textType = /text.*/;

    if (file.type.match(textType)) {
      var reader = new FileReader();

      reader.onload = function(e) {

        var lines = this.result.split('\n');
        for (var line = 0; line < lines.length; line++) {
          if (line % 2 != 0) {
            besedeNemske.push(lines[line]);
          } else {
            besedePrevod.push(lines[line]);
          }
        }

      }

      reader.readAsText(file);
    } else {
      fileDisplayArea.innerText = "File not supported!"
    }
  });
}



var random = 0;

function nastaviRandom() {
  random = Math.floor(Math.random() * 5);
}

function noviGlagol() {

  nastaviRandom();

  document.getElementById("vprasanje").innerHTML = besedePrevod[random];

}

function preveriOdgovor() {
  var odgovorjeno = document.getElementById("mojOdgovor").value;
  if (besedeNemske.indexOf(odgovorjeno) == random) {
    document.getElementById("odgovor").innerHTML = "Pravilni odgovor";
  } else {
    document.getElementById("odgovor").innerHTML = "Napačen odgovor.   Pravilni odgovor je " + (besedeNemske[random]) + "";
  }
}
<html>

<head>
  <meta charset="UTF-8">
</head>

<body>
  <div id="page-wrapper">

    <h1>Nemščina glagoli</h1>
    <div>
      Select a text file:
      <input type="file" id="fileInput">
    </div>
    <pre id="fileDisplayArea"><pre>

        <button onclick="noviGlagol()">Novi glagol</button>

        <div id="vprasanje"></div>
        <div id="odgovor"></div>

        <input type="text" id="mojOdgovor">
        <button onclick="preveriOdgovor()">Pošlji</button>
</div>
<script>
</script>
</body>
<html>

【问题讨论】:

  • 仅供参考,您的循环可以替换为index = besedeNemske.indexOf(odgovorjeno)
  • random 是否在任何地方初始化/赋值?如果是这样,在哪里/如何?
  • 请发布您的 HTML
  • 您的循环无法区分输入不匹配任何内容和匹配数组的第一个元素之间的区别。在这两种情况下,它都是index = 0。您需要为未找到使用不同的值。
  • 我敢打赌,文件中有您看不到的字符,可能是行尾的空格。尝试使用.push(lines[line].trim)

标签: javascript if-statement for-loop


【解决方案1】:

提交原始问题的 cmets 作为答案:

var index = 0;
for (var i = 0; i < besedeNemske.length; i++) {
  if (odgovorjeno == besedeNemske[i]) {
    index = i;
    break;
  }
}

对于这两种情况,index 将是 0

  1. 如果odgovorjeno == besedeNemske[0]
  2. 如果odgovorjeno 不是数组besedeNemske 中的元素

这是重构代码以使用包含的语言功能或库的一个非常好的用例,因为它不仅可以缩短您的代码,而且通常更正确(或者至少它们的错误是已知/理解的)。

正如 Baramar 指出的,您可以将解决方案更改为:

function preveriOdgovor() {
  var odgovorjeno = document.getElementById("mojOdgovor").value;
  if (besedeNemske.indexOf(odgovorjeno) == random) {
    document.getElementById("odgovor").innerHTML = "Pravilni odgovor";
  } else {
    document.getElementById("odgovor").innerHTML = "Napačen odgovor.   Pravilni odgovor je " + (besedeNemske[random]) + "";
  }
}

【讨论】:

  • 我在cmets中提到过这个问题,他说不是他的问题。
  • 谢谢。但它仍然不起作用。解决方案是例如“voda”,我输入“voda”,它说它不正确。但是,如果我在它询问我时输入“drevo”(它是数组中的最后一个元素),则表明它是正确的。看起来程序只喜欢数组的最后一个元素。
  • @Barmar 我发布了整个程序;)
  • 这没有帮助,因为我们没有要加载到脚本中的文件。创建一个演示您遇到的问题的最小示例。省略与问题无关的任何内容。所以我们不需要文件,我们只需要一个包含字符串的数组。
  • @Barmar 我用一些词填充了数组:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多