2016-10-26 5 views
2

У меня есть функция, которая собирает введенный ответ и проверяется, если собранный ответ такой же, как и решение. Вопросы задаются случайным образом. Вопросы и решения находятся в отдельном файле .txt.Если clauses in for loop действуют weird

У меня есть файл с некоторыми словами, и программа всегда выполняет свое условие, если последнее слово из списка правильно ответило, хотя если другие ответы на другие вопросы верны.

Любые предложения?

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>

+6

FYI, ваш цикл может быть заменен 'индекс = besedeNemske.indexOf (odgovorjeno)' ' – Barmar

+1

Does random' инициализируются/назначен ценность где-нибудь? если да, то где/как? –

+0

Пожалуйста, разместите свой HTML-код – Daryl

ответ

0

Чтобы представить замечания по первоначальному вопросу в качестве ответа:

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]) + ""; 
    } 
} 
+1

Я упомянул об этом в комментариях, он сказал, что это не проблема, с которой он сталкивается. – Barmar

+0

Спасибо. Но это все еще не работает. Решением является, например, «вода», и я печатаю «воду», и он говорит, что это неверно. Но если я введу «drevo» (это последний элемент в массиве), когда он попросил меня об этом, он показывает, что он правильный. Кажется, что программе нравится только последний элемент массива. – mrzlaroka

+0

@Barmar Я разместил всю программу;) – mrzlaroka