如何编写JavaScript的printOut()函数实现N×N指定字符矩阵打印
修正JavaScript实现N行N列字符打印功能
先说说原来代码里存在的几个问题:
- 输入框的值应该用
value属性获取,而不是innerHTML(innerHTML是用来操作元素内部HTML内容的,输入框的用户输入存在value里) - 变量
outPut没有初始化,直接拼接会得到undefined开头的错误结果 - 缺少字符输入验证逻辑,没检查用户是否只输入了一个字符
- 循环逻辑有误,原来的写法没办法正确生成每行N个字符的结构
下面是修正后的printOut()函数,完全满足你的需求:
function printOut() { // 获取输入值 const charInput = document.getElementById("theChar").value.trim(); const nbrInput = document.getElementById("theNbr").value; const outputElement = document.getElementById("theText"); // 1. 验证输入 // 检查字符是否为单个非空字符 if (charInput.length !== 1) { outputElement.innerHTML = "请输入**单个字符**!"; return; } // 检查数字是否为正整数 const n = parseInt(nbrInput); if (isNaN(n) || n <= 0 || !Number.isInteger(n)) { outputElement.innerHTML = "请输入**正整数**!"; return; } // 2. 生成输出内容 let output = ""; // 循环N次,每次生成一行N个字符 for (let i = 0; i < n; i++) { // 生成一行:重复N次字符 + 换行标签 const line = charInput.repeat(n) + "<br>"; output += line; } // 3. 渲染到页面 outputElement.innerHTML = output; }
代码说明:
- 输入验证:先对字符输入做长度检查(去掉首尾空格后必须是1个字符),对数字输入做整数和正数值检查,不符合条件时给出明确提示
- 内容生成:使用
repeat()方法快速生成每行的N个字符,循环N次拼接成完整的多行内容,逻辑清晰简洁 - 渲染优化:直接操作目标元素的
innerHTML,把生成好的内容一次性插入,比多次修改DOM更高效
另外,你的HTML里有个小笔误:type="charachter"应该改成type="text"(HTML里没有charachter这个输入类型),修正后的HTML如下:
<!DOCTYPE html> <html> <head> <title>N行N列字符打印</title> </head> <body> <p id="theText"></p> <p id="theNumber"></p> 输入一个字符: <input type="text" id="theChar"> 输入一个数字: <input type="number" id="theNbr"> <button onclick="printOut()">print out!</button> <script type="text/javascript" src="script.js"></script> </body> </html>
这样运行后,用户输入单个字符和正整数,点击按钮就能看到N行每行N个该字符的效果啦~
内容的提问来源于stack exchange,提问作者Ali Darwish
相关产品推荐
相关产品推荐

