尝试根据用户输入显示数组中的元素

时间:2017-02-11 15:54:24

标签: javascript arrays while-loop user-input increment

我正在尝试制作一个程序,将用户字符串输入显示为x的5x5矩阵。 因此,如果用户输入" abc",结果输出应该是第一行:

Expected output

我目前只能将其显示为a,b和c,但是一旦代码正常工作,它会将其扩展为字母表中的每个字母。

我为每一行创建了一个数组,其中包含在每一行中创建一个字母所需的字符。

因此,如果用户输入abc,程序会将输入分成一系列字符[' a'' b'' c']和然后计算输入的长度(3)。 while循环开始,它将检查用户输入的第一个元素是什么字母,并将其与alphaRow1数组中的正确元素匹配并打印它。 while循环将重复此操作,直到它遍历用户输入中的每个元素。

我目前只尝试了第一行的代码,但稍后会添加其他行。

每当我输入用户输入时,无论我是否输入' b',它都会为' a'提供alphaRow1元素。或' C&#39 ;. while循环似乎重复正确,所以如果我输入abc,它将显示alphaRow1元素' a' 3次:

Actual output when user input is "abc"

我不确定出了什么问题,因此它每次只显示第一个元素。 while循环似乎是正确的,它似乎正在递增

alphaRow1 = ["  x  ","xxxx "," xxxx"];
alphaRow2 = [" x x ","x   x","x    "];
alphaRow3 = [" xxx ","xxxx ","x    "];
alphaRow4 = ["x   x","x   x","x    "];
alphaRow5 = ["x   x","xxxx "," xxxx"];

input=prompt("Enter something","Enter here");
letterCount=0;

splitInput = input.split('');
inputLength = input.length;



while (letterCount < inputLength){  //while loop for first row.
    if (splitInput[letterCount] = 'a'){ //if selected element in user input
        document.write(alphaRow1[0]);   //is 'a' display first element from
        letterCount++;                  //alphaRow1
    }
    else if (splitInput[letterCount] = 'b'){
        document.write(alphaRow1[1]);
        letterCount++;
    }
    else if (splitInput[letterCount] = 'c'){
        document.write(alphaRow1[2]);
        letterCount++;
    }
    else{
        document.write("error");
    }
}

3 个答案:

答案 0 :(得分:1)

if和else语句中有错误。当您应该使用等于运算符=

时,您正在使用赋值运算符==

答案 1 :(得分:0)

你的代码的问题是你应该在while循环中使用double == if`s。

您实际上覆盖了if和else if语句中的值。

答案 2 :(得分:0)

除了您在if条件下进行的分配外,您还应该避免使用document.write。而是构建一个字符串作为结果,并分别处理页面的实际输出。为此,您可以使用pre元素,然后将其textContent属性设置为结果字符串。 pre也会渲染换行符并使用单行间距字体,这就是您需要的。

此外,如果您按照它们所代表的字母键入模式,则模式的数据结构将更容易使用,即创建具有属性“a”的对象,该对象将具有该字母的完整模式作为其值。这样你就不需要所有那些单独的if条件,一旦你需要覆盖所有可用的字母和字符,这些条件就会失控。

以下是建议的代码。尝试一下。

// Define your patterns keyed by the letter first, not by the line
var pattern = {
    a: ["  X  ",
        " X X ",
        " XXX ",
        "X   X",
        "X   X",
        "X   X"],
    b: ["XXXX ",
        "X   X",
        "XXXX ",
        "X   X",
        "X   X",
        "XXXX "],
    c: [" XXXX",
        "X    ",
        "X    ",
        "X    ",
        "X    ",
        " XXXX"],
    '?': [" XXX ",
          "X   X",
          "   X ",
          "  X  ",
          "     ",
          "  X  "]
};

// Use split/join and map to gather the output string. Do
// not write with document.write
function getOutput(s) {
    return pattern.a.map(function (_, lineNo) {
        return s.split('').map(function(letter) {
            if (!pattern[letter]) letter = '?' // default
            return pattern[letter][lineNo];
        }).join(' ');
    }).join('\n');
}

// I/O handling: separated from logic
var input = document.querySelector('input');
// Use pre element to have monospaced font and render all white space
var output = document.querySelector('pre');

input.oninput = function() {
    // At every change in the input, generate the output
    output.textContent = getOutput(this.value);
}
Input: <input>
<pre></pre>