首页 > 解决方案 > 用字母做一个正方形

问题描述

我有这个:

ooooo
ooooo
ooooo
ooooo
ooooo

穿上o除中间以外的所有东西,这样它就变成了这样:

ooooo
o   o
o   o
o   o
ooooo 

无论如何我可以在Javascript中做到这一点吗?我的代码目前是: HTML:

<input type = 'text' id = 'box' placeholder = 'Enter n'  onkeyup = 'bigbox();'/>
        <br><br>

        <div id="output"></div>

脚本:

 function bigbox() { 

            number = document.getElementById('box').value;
            display = document.getElementById("output");

        for(let j = 0; j<number; j++) {
            for(let i = 0; i<number; i++) 
            text += "o";
            text += "<br>";

            }


        display.innerHTML = text;

标签: javascripthtmlascii-art

解决方案


如果其中一个索引为零或加一等于正方形的所需位置,则可以添加,然后使用边框字符或空格。

基本上这条线

text += i === 0 || i + 1 === size || j === 0 || j + 1 === size ? "o": " ";

包含三个部分:

  1. 一个加法赋值+=,它接受一个表达式并将其添加到左侧变量中。

    text += someExpression
    
  2. 一个条件(三元)运算符?:,它接受一个表达式并检查它是否为(如除零或之外的任何数字、任何非空字符串、NaN对象或数组、)true(如零/ 、、、、、 )。NaN''nullundefinedfalse

    如果为真,则取之后的值,?如果为,则取之后的值:

    它是一种if带有表达式的语句的简短形式。

    expression ? alternative1 : alternative2 // code
    truthy   ->  alternative1                // result
    falsy    ->                 alternative2
    
  3. 一个条件部分。条件与逻辑 OR||连接,这将返回第一个值或最后一个假值。

    condition1 || condition2 || condition3 || ...
    

    条件检查索引,如果为零或最大的有效值,那么你打了一个边界,否则你在正方形内。

function bigbox(size) {
    var display = document.getElementById("output"),
        text = "";

    size = +size;
    for (let j = 0; j < size; j++) {
        for (let i = 0; i < size; i++) {
            text += i === 0 || i + 1 === size || j === 0 || j + 1 === size ? "o": " ";
        }
        text += "<br>";
    }
    display.innerHTML = text;
}
<input type="text" id="box" onchange="bigbox(this.value)">
<pre id="output"></pre>


推荐阅读