2017-04-27 91 views
0

我目前正在爲我的代碼類開發一個項目,而且我的代碼存在問題。我的代碼是添加正確的字母到wrongLetters數組,我不確定爲什麼。它也只對第二個正確的字母和後面的字符進行輸入,這意味着如果我正確猜測了一個正確的字母,它會將它添加到正確的字母數組中,但是之後每個正確的字母都會導致它被添加到correctLetters和wrongLetters中當它只應該被添加到correctLetters。如果你能幫忙請做,我很困惑。謝謝。有人可以幫我用我的Hang子手猜字母問題嗎?

This link will bring to my current code on CodePen. With the HTML and CSS. You will find the issue in the JS portion of my code thank you, which is below as well.

var guessWords = ["school", "test", "quiz", "pencil", "ruler", "protractor", "teacher", "homework", "science", "math", "english", "history", "language", "elective", "bully", "grades", "recess", ] 
var secretWord = guessWords[Math.floor(Math.random()*guessWords.length)]; 
var wrongLetters = [] 
var correctLetters = [] 
var repeatLetters = [] 
function startGame() { 
    var testWord = document.getElementById("randTest").innerHTML = secretWord; 
    var correctLettersOUT = ""; 
    document.getElementById("currentGuess").innerHTML = secretBlanks(secretWord) 
    function secretBlanks(secretWord) { 
     for (var i = 0; i < secretWord.length; i++) { 
     correctLettersOUT+=("_ "); 
     } return correctLettersOUT; 

}} 
function correctWord() { 
    var guessLetter = document.getElementById("guessLetter").value; 
    document.getElementById("letter").innerHTML = guessLetter; 

for (i=0; i < secretWord.length; i++) { 
    if (correctLetters.indexOf(guessLetter) === -1) 

     if (guessLetter === secretWord[i]) { 
      correctLetters.push(guessLetter); 
     } else if(wrongLetters.indexOf(guessLetter) === -1) { 
      wrongLetters.push(guessLetter); 
     } 
} 

    console.log(correctLetters); 
    console.log(wrongLetters); 
    console.log(repeatLetters); 
} 

回答

0

請參閱您的for循環的條件 - 在第一次迭代中,如果字母是從祕密單詞的第一個字母不同,不存在於wrongLetters那麼你將它添加到這個陣列。
首先檢查密碼字是否包含字母,然後確定哪個數組應包含此字母。 (順便說一句,爲什麼在循環檢查它時,你可以使用indexOf或ES6 includes功能?)

0
var guessWords = ["school", "test", "quiz", "pencil", "ruler", "protractor", "teacher", "homework", "science", "math", "english", "history", "language", "elective", "bully", "grades", "recess", ] 
var secretWord = guessWords[Math.floor(Math.random()*guessWords.length)]; 
var wrongLetters = [] 
var correctLetters = [] 
var repeatLetters = [] 
function startGame() { 
    var testWord = document.getElementById("randTest").innerHTML = secretWord; 
    var correctLettersOUT = ""; 
    document.getElementById("currentGuess").innerHTML = secretBlanks(secretWord) 
    function secretBlanks(secretWord) { 
     for (var i = 0; i < secretWord.length; i++) { 
     correctLettersOUT+=("_ "); 
     } return correctLettersOUT; 

}} 
function correctWord() { 
    var guessLetter = document.getElementById("guessLetter").value; 
    document.getElementById("letter").innerHTML = guessLetter; 

for (var i = 0; i < secretWord.length; i++) { 
    if (correctLetters.indexOf(guessLetter) === -1) 

     if (guessLetter === secretWord[i]) { 
      correctLetters.push(guessLetter); 
      break; 
     } 
} 
    if(wrongLetters.indexOf(guessLetter) === -1 && correctLetters.indexOf(guessLetter) === -1) { 
     wrongLetters.push(guessLetter); 
    } 

    console.log(correctLetters); 
    console.log(wrongLetters); 
    console.log(repeatLetters); 
} 

的問題是,所添加的信件,wrongLetters數組的代碼是內部的循環,被檢查正確字母,所以如果正確的字母是讓字母2表示循環會檢查字母1,然後將其添加到wrongLetters數組中,因爲它不是同一個字母。

我將檢查移到了循環外部,現在字母被添加到正確的數組中。現在,如果你想在同一封信中,曾多次將被添加到correctLetters陣列多次,

,如果你不希望這樣的行爲只是改變了第一,如果檢查從

if (guessLetter === secretWord[i])

if (guessLetter === secretWord[i] && correctLetters.indexOf(guessLetter) === -1)

+0

非常感謝! – MilkyBoii

相關問題