2016-10-04 3 views
0

Я пытаюсь сделать простую викторину, где он должен суммировать правильные ответы и неправильные ответы. Дело в том, что, хотя я поставил два из трех правильных ответов, я продолжаю получать одинаковый результат для правильного и неправильного массива: 0. Поэтому в конце должно быть что-то неправильно в функции оценки. Заранее спасибоJavascript кодировка викторина не складывается

var responsesArray= []; 
 
var correct=[]; 
 
var incorrect= []; 
 

 

 

 

 
function question2() { 
 

 
    var firstQuestion = prompt('Does null === 0 ? (Yes or No)') 
 

 
// why do you need to convert the answer to lowercase? 
 
    if (firstQuestion.toLowerCase() === 'yes') { 
 
    firstQuestion = true 
 
    } else if (firstQuestion.toLowerCase() === 'no') { 
 
    firstQuestion = false 
 
    } else { 
 
// what if the user writes something other than yes or no? 
 
// they will have to answer the question again 
 
    alert("Please answer either Yes or No"); 
 
    return question2(); 
 
    } 
 
    responsesArray.push(firstQuestion); // add the true or false value to the responses array 
 
} 
 

 
question2(); 
 

 

 

 
function question3() { 
 
    var js = prompt('What was the original name for JavaScript: Java, LiveScript, JavaLive, or ScriptyScript?'); 
 
    js = js.toLowerCase(); 
 
    switch (js) { 
 
    // your own answers 
 
    
 
    case "livescript": 
 
    console.log("Correct!"); 
 
    break; 
 
    case "Java": 
 
    console.log("wrong"); 
 
    break; 
 
    case "JavaLive": 
 
    console.log("wrong"); 
 
    break; 
 
    case "ScriptyScript": 
 
    console.log("wrong"); 
 
    break; 
 
    default: 
 
    console.log("Sorry the answer is LiveScript"); 
 
    } 
 
    responsesArray.push(js); 
 
    
 
    var mine = prompt('What coding language is exclusively related to the back-end: Ruby, JavaScript, HTML?'); 
 
    mine= mine.toLowerCase(); 
 
    switch (mine) { 
 
    // your own answers 
 
    \t case "ruby": 
 
    console.log("Yeah!"); 
 
    break; 
 
    case "html": 
 
    console.log("ouuu I'm sorry for you"); 
 
    break; 
 
    case "javascript": 
 
    console.log("Yeah but so so"); 
 
    break; 
 
    } 
 
    responsesArray.push(mine); 
 
} 
 

 
question3(); 
 

 
function evaluate(responsesArray) 
 
{ 
 

 
for (var i = 0; i < responsesArray.length; i++) 
 
\t { 
 
\t \t if (responsesArray[i] === true|| "livescript" || "ruby") 
 
    { 
 
     correct++; 
 

 
    } else{ 
 
     if (responsesArray[i] !== true|| "livescript" || "ruby") { 
 
     incorrect++; 
 
    } 
 
\t } 
 
}

+0

У вас много ошибок синтаксиса. Запустите его и посмотрите. –

+2

@PraveenKumar, не было других синтаксических ошибок, чем одна отсутствующая закрывающая скобка .... – trincot

+0

@trincot Ну да. –

ответ

1

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

Пожалуйста, проверьте ниже фрагмент.

var responsesArray= []; 
 
var correct=0; 
 
var incorrect= 0; 
 
//Correct answer key initialize 
 
var index = 0; 
 
//Initialize array to store correct answer. 
 
var correctAnswers = []; 
 

 

 
function question2() { 
 
    //Save correct answer. 
 
    correctAnswers[index++] = "yes"; 
 
    var firstQuestion = prompt('Does null === 0 ? (Yes or No)') 
 

 
    // why do you need to convert the answer to lowercase? 
 
    if (firstQuestion.toLowerCase() === 'yes') { 
 
    console.log("correct"); 
 
    firstQuestion = 'yes' 
 
    } else if (firstQuestion.toLowerCase() === 'no') { 
 
    console.log("in-correct"); 
 
    firstQuestion = 'no' 
 
    } else { 
 
    // what if the user writes something other than yes or no? 
 
    // they will have to answer the question again 
 
    alert("Please answer either Yes or No"); 
 
    return question2(); 
 
    } 
 
    responsesArray.push(firstQuestion); // add the true or false value to the responses array 
 
} 
 

 
question2(); 
 

 

 

 
function question3() { 
 
    //Save correct answer. 
 
    correctAnswers[index++] = "livescript"; 
 
    var js = prompt('What was the original name for JavaScript: Java, LiveScript, JavaLive, or ScriptyScript?'); 
 
    js = js.toLowerCase(); 
 
    switch (js) {  
 
     // your own answers 
 

 
    case "livescript": 
 
     console.log("Correct!"); 
 
     break; 
 
    case "Java": 
 
     console.log("wrong"); 
 
     break; 
 
    case "JavaLive": 
 
     console.log("wrong"); 
 
     break; 
 
    case "ScriptyScript": 
 
     console.log("wrong"); 
 
     break; 
 
    default: 
 
     console.log("Sorry the answer is LiveScript"); 
 
    } 
 
    responsesArray.push(js); 
 
    
 
    //Save correct answer. 
 
    correctAnswers[index++] = "ruby"; 
 
    var mine = prompt('What coding language is exclusively related to the back-end: Ruby, JavaScript, HTML?'); 
 
    mine= mine.toLowerCase(); 
 
    switch (mine) { 
 
     // your own answers 
 
    case "ruby": 
 
     console.log("Yeah!"); 
 
     break; 
 
    case "html": 
 
     console.log("ouuu I'm sorry for you"); 
 
     break; 
 
    case "javascript": 
 
     console.log("Yeah but so so"); 
 
     break; 
 
    } 
 
    responsesArray.push(mine); 
 
    //Call function to evaluate correct or incorrect answer 
 
    evaluate(responsesArray,correctAnswers) 
 
} 
 

 
question3(); 
 

 
function evaluate(responsesArray,correctAnswers) 
 
{ 
 
    for (var i = 0; i < responsesArray.length; i++) 
 
    { 
 
    //Match response with correct answer. 
 
    if (responsesArray[i] === correctAnswers[i]) 
 
    { 
 
     correct++; 
 

 
    } else{ 
 
     if (responsesArray[i] !== correctAnswers[i]) { 
 
     incorrect++; 
 
     } 
 
    } 
 
    } 
 
    alert("Correct : "+correct+" and Incorrect : "+incorrect); 
 
}

+0

все еще не работает, тот же результат правильный => 0 – Defoe

+0

Можете ли вы обновить фрагмент в рабочем режиме в своем вопросе. Поэтому я могу отлаживать и помогать вам. –

+1

Я вижу, что вы повторно использовали переменную 'correctAnswers', которую я уже предложил в своем ответе. Хорошо для вас ;-) – trincot

0

Как вы проверить правильные ответы неправильно. Вместо того, чтобы определить массив с правильными ответами и проверить их следующим образом:

var correct = incorrect = 0; // better initialise your variables 

function evaluate(responsesArray) { 
    var correctAnswers = [true,"livescript","ruby"]; 
    for (var i = 0; i < responsesArray.length; i++) { 
    if (responsesArray[i] === correctAnswers[i]) { 
     correct++; 
    } else { 
     incorrect++; 
    } 
    } 
} 

Что вы меня было:

if (responsesArray[i] === true|| "livescript" || "ruby"){ 

Но это означает, что:

if the answer was true, or .... "livescript" is true, or ... "ruby" is true, then 

Как считает JavaScript, чтобы строки правша, состояние if всегда было бы правдой.

Отметим также, что нет необходимости делать вторую if, так как else часть выполняется только если первое if условие было ложным, что означает, что вы уже просочились в тех случаях, когда ответ был неправильным.

Наконец, ваши счетные переменные должны быть определены до того, как вы начнете их увеличивать. Он работает без этого определения, но если одна из двух переменных не будет увеличиваться, она будет по-прежнему не определена после вашего вызова evaluate. Лучше всегда определять свои переменные.

+0

Нет, ваше решение просто хранит правильные ответы, которые вы даете им уже в правильной переменной annswers внутри правильной переменной. – Defoe

+0

Я думаю, вы неправильно поняли. Я просто перевел ваш неправильный код 'if' в правильный синтаксис, поместив правильные значения не в' if', а в переменную. Но я вижу, что вы предпочли ответ от Рахула, который на самом деле скопировал мою идею. Но нет проблем ;-) – trincot

+0

Да, вы правы, однако Рахул добавил другие 50%, чтобы заставить его работать (индекс ++, функция вызова, два аргумента в функции оценки ...) Спасибо вам обоим;) – Defoe

Смежные вопросы