【问题标题】:Javascript print square using for loop and conditional statement only仅使用 for 循环和条件语句的 Javascript 打印方块
【发布时间】:2018-03-25 11:10:59
【问题描述】:

刚开始我的大学课程,在 javascript 方面有点挣扎。我被要求使用任何字符显示一个正方形,但是,解决方案必须结合 for 循环和 if 语句。

这是我到目前为止所拥有的,我感觉非常接近,但我无法让第二行显示。我知道这可以通过两个 for 循环来完成(一个用于变量的迭代,另一个用于空格)。但这不是我被要求解决这个问题的方式。

这是我的代码:

var size = 3;
let i;


for(i = 0; i < size; i++) {
print ("*");
if (size === i){ 
println (""); 
}
}

就上下文而言,这一切都发生在教授自制的学习环境中。

【问题讨论】:

    标签: javascript for-loop conditional


    【解决方案1】:

    您可以使用嵌套的for 循环并在每行填充后换行。

    function print(s) { document.getElementById('out').innerHTML += s; }
    function println(s) { document.getElementById('out').innerHTML += s + '\n'; }
    
    var size = 5,
        i, j;
    
    for (i = 0; i < size; i++) {
        for (j = 0; j < size; j++) {
            print("*");
        }
        println("");
    }
    &lt;pre id="out"&gt;&lt;/pre&gt;

    单循环,检查i是否不等于零,如果余数为零,则添加换行符。

    使用:

    • === identity/strict equality 运算符检查类型和值,例如如果两者都是数字并且值相同,

    • !== non-identity/strict inequality 运算符和上面一样,但它检查它的对面,

    • % remainder 运算符,返回一个数字的其余部分,除法返回一个整数。

    • &amp;&amp; logical AND 运算符,检查两边并返回最后一个值,如果两者都是 truthy(如任何数组、对象、非零数字、非空字符串、true)或第一个,如果是falsy(如undefinednull0''(空字符串),false,truthy的反义词)。

    function print(s) { document.getElementById('out').innerHTML += s; }
    function println(s) { document.getElementById('out').innerHTML += s + '\n'; }
    
    var size = 5,
        i;
    
    for (i = 0; i < size * size; i++) {
        if (i !== 0 && i % size === 0) {
            println("");
        }
        print("*");
    }
    &lt;pre id="out"&gt;&lt;/pre&gt;

    【讨论】:

    • 这让我有点困惑,哈哈,例如,输出需要看起来像一个填充的正方形而不是一个空的正方形。不过谢谢你。
    • 抱歉,现在输出已填充。
    • 这是我之前的做法,但是,他现在想要一个条件语句。这是我的第一个建议,但他说我玩的不公平,哈哈。
    • 其中一些条件操作对我来说丢失了,是否有机会解释模函数的作用?
    • 非常感谢,我真的很喜欢这个工作方式,我应该在输入任何内容之前多考虑一下这个问题。我什至没有考虑检查 from i 的其余部分来创建一个新行。我的想法更加线性。
    【解决方案2】:

    你想制作一个 * 的正方形,其大小是它的边上 * 的数量?

    让我们将一个任务分成 3 个部分:

    • 打印顶部的位置,如 *****
    • 您打印中间(左侧和右侧)的位置,例如 * *
    • 底部打印位置(与顶部相同)

    现在让我们编写代码吧,我让代码尽可能简单,这可以用更少的行来完成,但我认为这对于初学者来说会更容易理解:

    var size = 5;
    var i = 0;
    
    // top
    for (i = 0; i < size; i++)
        console.log("*");
    
    //middle
    for (var j = 0; j < size - 2; j++){
      console.log("\n"); // go to next row
      // middle (2 on sides with size-2 in between)
      console.log("*");
      for (i = 0; i < size-2; i++)
        console.log(" ");
      console.log("*\n"); // goes to new row as well
    }
    
    // same as top
    for (i = 0; i < size; i++)
        console.log("*");
    

    全正方形更简单:

    var size = 5;
    var i = 0;
    
    for (var i = 0; i < size; i++){ // iterates rows
      for (var j = 0; j < size; j++) // iterates * in row
          console.log("*");
      console.log("\n") // moves to new row
    }
    

    为了打印一行,您打印同一个符号 X 次。好吧,要打印 X 行,我们可以再使用 1 次(只是这次我们迭代了一个不同的变量(j 是一行 *,i 是行数)。

    一行完成后,我们用\n进入下一行。

    至于

    必须包含 if 语句

    把这个放在最后:

    if (youCanHandleTheTruth) console.log("It's a terrible practice to tell students their solution MUST CONTAIN CODEWORDS. If you need them to showcase something, write appropriate task that will require them to do so.");
    

    【讨论】:

    • 这非常有用,但是方块不必为空,它需要是静态 X*X 方块,每个方块中都有一个字符。
    • 提醒一下,它必须至少包含一个 if 语句。
    • 告诉给你任务的人,让解决方案包含代码字是很糟糕的。这不符合编程的精神。但是,很好,你总是可以在最后添加一个 if ;)如果你想显示它,只需将 youCanHandleTheTruth 初始化为真实值:D
    • 哈哈,我相信他会因为这个反馈而欣喜若狂!我休息了一下,我又回到了这一点,这至少为第一行提供了正确的显示。我考虑过在其中添加一个 else,但我只是不知道如何在没有嵌套 if 的行和行的情况下有效地扩展它。
    【解决方案3】:

    我正在使用 console.log 来“打印”正方形:

        var dimension = 10;
        var edge = '*';
        var inside = ' ';
        var printLine;
    
        for (var i = 1; i <= dimension; i++) {
            if (i === 1 || i === dimension) {
                printline = Array(dimension + 1).join(edge);
            } else {
                printline = edge + Array(dimension - 1).join(inside) + edge;
            }
            console.log(printline);
        }
    

    请注意,在以下示例中,长度为 11 的数组只能得到 10 个“a”,因为 Array.join 将参数放在数组元素之间:

    Array(11).join('a'); // create string with 10 as "aaaaaaaaaa"
    

    【讨论】:

    • Array.join() 的好想法。
    【解决方案4】:

    for 循环只迭代 3 次,打印第一行。如果你想要一个正方形,你必须总共打印 9 颗星,对吧?所以我假设,这是你要采用的方法吗,你需要迭代直到size,但直到size * size

    【讨论】:

    • 循环需要实际捕获用户输入的组成正方形的 * 数。如果我要迭代大小 * 大小,我会不会只得到一串 9 * 的字符串? - 感谢您的帮助!
    猜你喜欢
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多