2014-12-07 55 views
0

這是我現在寫的功能。網絡控制檯對我來說沒有太大作用。每次在文本框中輸入單詞時,即使它是迴文,它也會返回"undefinedThis is not a palindrome!"如何創建一個函數來接受輸入並測試它是否是迴文?

不知道這裏有什麼問題。或許與if陳述有關?我怎樣才能讓函數忽略大寫字母?我希望它考慮"bob""Bob"迴文。

function test() { 
    // Assumes: a string is entered into the "palin" text box 
    // Results: tests if the string is a palindrome and 
    // returns the conclusion to outputDiv 

    var word, copy, i; 
    word = document.getElementById("palin").value; 
    copy = " "; 
    i = 0; 

    while (i < word.length) { 
     copy = word.charAt(i) + copy; 
     i=i+1; 
    } 

    if (word === copy) { 
     document.getElementById("outputDiv").innerHTML = 
      document.getElementById("outputDiv").value + 
      "This is a palindrome!"; 
    } else { 
     document.getElementById('outputDiv').innerHTML = 
      document.getElementById('outputDiv').value + 
      "This is not a palindrome!"; 
    } 
} 
+0

解決大寫簡單不匹配問題在比較開始之前,您可以將整個字符串轉換爲小寫字母。 http://www.w3schools.com/jsref/jsref_tolowercase.asp – tnishada 2014-12-07 04:43:58

+0

當程序執行時,應該添加一些'console.log()'或'alert()'語句來調試'word'和'copy'的值。問題可能是您將'copy'初始化爲''''(空格)而不是空字符串''''。但是你需要學習如何調試你自己的代碼,所以一定要記錄一下。 – 2014-12-07 04:45:29

+0

@ user2570380不需要'(word.split(「」)。reverse()。join – 2014-12-07 05:00:04

回答

0

你的代碼幾乎是正確的。 here is fixed jsfiddle example

改變你的代碼

function test() { 

    var word, copy, i; 
    word = document.getElementById("palin").value.toLowerCase();//turn to lowercase 
    copy = ""; 
    i = 0; 

    while (i < word.length) { 
     copy = word.charAt(i) + copy; 
     i=i+1; 
    } 

    if (word === copy) { 
     document.getElementById("outputDiv").innerHTML = 
      document.getElementById("palin").value + " This is a palindrome!"; 
    } else { 
     document.getElementById('outputDiv').innerHTML = 
      document.getElementById('palin').value + " This is not a palindrome!"; 
    } 
} 

copy = " ";應更改爲copy = "";這是因爲"bob" not equal to "bob " 您使用document.getElementById("outputDiv").value第一個問題這是undifined,因爲它是一個div並不是一個文本,以便值undifined。什麼,你可能需要的是document.getElementById("palin").value

1

如果您將邏輯與演示文稿分開,最好。在你的情況下,邏輯是迴文檢查。演示文稿從文本框獲取輸入並將輸出發送到div。

這是我會做:

var input = document.getElementById("input"); 
 
var output = document.getElementById("output"); 
 

 
document.getElementById("button").addEventListener("click", function() { 
 
    var s = input.value; 
 
    output.innerHTML = s + " is" + (isPalindrome(s) ? "" : " not") 
 
        + " a palindrome."; 
 
}); 
 

 
function isPalindrome(s) { 
 
    s = s.toLowerCase(); 
 
    return s.split("").reverse().join("") === s; 
 
}
<input type="text" id="input"/> 
 
<button id="button">Palindrome?</button> 
 
<div id="output"></div>

正如你可以看到我已經把isPalindrome邏輯放到一個單獨的函數。因此,我已將邏輯從演示中分離出來。你應該一直這樣做。它使編程更簡單。

相關問題