我正在尝试制作一个程序,将用户字符串输入显示为x的5x5矩阵。 因此,如果用户输入" abc",结果输出应该是第一行:
我目前只能将其显示为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");
}
}
答案 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>