Простая игра-викторина JavaScript

javascript undefined

236 просмотра

3 ответа

Я только учусь сейчас. Не могли бы вы помочь мне, почему я не получаю правильный вывод. Это мой код:

//ask questions
var quiz = [
  ["When is Bulgaria established?", 681],
  ["What year was it before 16 years?", 2000],
  ["When does WWII ends?", 1945]
];

//variables
var answer = [];
var correct = [];
var wrong = [];
var correctAns = 0;
var wrongAns = 0;
var oList = "<ol>";

//function to print the result in ordered list
function printResult(result){
  for(var j = 0; j < result.length; j++){
    oList += "<li>" + result[i] + "</li>";
  }
  oList += "</ol>";
  return oList;
}

function print(message) {
  document.getElementById('output').innerHTML = message;
}



//looping, adding correct and wrong answeres
for(var i = 0; i < 3; i++) {
  answer[i] = prompt(quiz[i][0]);
  if(parseInt(answer[i]) == quiz[i][1]){
    correct.push(quiz[i][0]);
    correctAns++;
  } else {
    wrong.push(quiz[i][0]);
    wrongAns++;
  }
}


//print logic
if(correct.length < 1 || correct == undefined){
  print("You did not guess any of the quiestions!");
} else if (correct.length >= 1){
  print("You have guessed " + correctAns + " questions.");
  print(printResult(correct));
  print("You have " + wrongAns + " wrong answeres.");
  if(wrongAns > 0){
    print(printResult(wrong));
  }
}

Я просматривал этот код снова и снова, и я до сих пор не могу понять, почему я получаю неопределенный результат. В отладчике после цикла я проверяю свои переменные, и все кажется нормальным.

Автор: Tsenko Aleksiev Источник Размещён: 08.11.2019 11:05

Ответы (3)


2 плюса

Решение

В основном у вас есть три проблемы.

  • При повторном использовании oListпеременная должна быть объявлена ​​внутри и использоваться только в printResult.

  • Внутри printResult, использование, iгде jбыли использованы и

  • В print, заменить реальное содержание с новым содержанием.

Просто небольшая подсказка с именами переменных для подсчета. Это хорошая практика , чтобы начать всегда с iвместо jи идти с буквами алфавита.

var quiz = [["When is Bulgaria established?", 681], ["What year was it before 16 years?", 2000], ["When does WWII ends?", 1945]],
    answer = [],
    correct = [],
    wrong = [],
    correctAns = 0,
    wrongAns = 0;

//function to print the result in ordered list
function printResult(result) {
    var oList = "<ol>"; // !!! move variable inside of the function
    for (var j = 0; j < result.length; j++) {
        oList += "<li>" + result[j] + "</li>"; // !!! use j indstead if i
    }
    oList += "</ol>";
    return oList;
}

function print(message) {
    document.getElementById('output').innerHTML += message; // !!! append message
}

//looping, adding correct and wrong answeres
for (var i = 0; i < 3; i++) {
    answer[i] = prompt(quiz[i][0]);
    if (parseInt(answer[i]) == quiz[i][1]) {
        correct.push(quiz[i][0]);
        correctAns++;
    } else {
        wrong.push(quiz[i][0]);
        wrongAns++;
    }
}

//print logic
if (correct.length < 1 || correct == undefined) {
    print("You did not guess any of the quiestions!");
} else if (correct.length >= 1) {
    print("You have guessed " + correctAns + " questions.");
    print(printResult(correct));
    print("You have " + wrongAns + " wrong answeres.");
    if (wrongAns > 0) {
        print(printResult(wrong));
    }
}

Автор: Nina Scholz Размещён: 20.08.2016 09:01

3 плюса

В вашей функции printResult вы используете var i вместо j,

Также вам лучше использовать innerHtml + = message;

//ask questions
var quiz = [
  ["When is Bulgaria established?", 681],
  ["What year was it before 16 years?", 2000],
  ["When does WWII ends?", 1945]
];

//variables
var answer = [];
var correct = [];
var wrong = [];
var correctAns = 0;
var wrongAns = 0;
   

//function to print the result in ordered list
function printResult(result){
//HERE:
 var oList = "<ol>";
  for(var j = 0; j < result.length; j++){
    oList += "<li>" + result[j] + "</li>";
  }
  oList += "</ol>";
  return oList;
}

function print(message) {
  document.getElementById('output').innerHTML += message;
}



//looping, adding correct and wrong answeres
for(var i = 0; i < 3; i++) {
  answer[i] = prompt(quiz[i][0]);
  if(parseInt(answer[i]) == quiz[i][1]){
    correct.push(quiz[i][0]);
    correctAns++;
  } else {
    wrong.push(quiz[i][0]);
    wrongAns++;
  }
}


//print logic
if(correct.length < 1 || correct == undefined){
  print("You did not guess any of the quiestions!");
} else if (correct.length >= 1){
  print("You have guessed " + correctAns + " questions.");
  print(printResult(correct));
  print("You have " + wrongAns + " wrong answeres.");
  if(wrongAns > 0){
    print(printResult(wrong));
  }
}
<div id="output">
</div>

Автор: Ziv Weissman Размещён: 20.08.2016 08:52

2 плюса

Ваша основная ошибка - использовать i intead of j:

for(var j = 0; j < result.length; j++){
   oList += "<li>" + result[j] + "</li>";// here was i before
}
Автор: Maciej Sikora Размещён: 20.08.2016 08:53
Вопросы из категории :
32x32