循环迭代。 JavaScript控制台图片

时间:2019-05-06 17:47:26

标签: javascript nested-loops

我是Java的新手,也是stackoverflow的新手,所以这是我一直忙了几天的问题。 我要做一个作业,一个控制台应用程序在控制台上打印“ M”,该控制台由星号的“ *”组成,并由减号“-”包围,它们充当空格。 字符的宽度为N。 但是,正如您从下面的代码中看到的那样,由于似乎无法弄清楚如何打印字符的另一部分(与当前字符相反),我仅完成了一半。 对不起,我的编程和解释都很混乱,因为我对编程完全陌生。请给我一些有关如何继续执行代码逻辑的好的建议。

var newArr = [3, 5, 7, 9, 11];
let N = Number(newArr[0]);
console.log(`N = ${N}`);
let str = '';
let j = '';
let k = ''

if (N > 2 && N < 10000) {

  for (var i = '-'; i.length <= N + 1; i += '-') {
    str += '*';
    if (j.length <= N * 5) {
      for (j = ''; j.length <= N * 5; j += '-') {
        if (j.length >= N && j.length < N * 2) {
          j += str.repeat(N);

        } else if (j.length >= N * 3.5 && j.length < N * 4) {
          j += str.repeat(N)
        }
      }
    }
    console.log(i + j)

  }

}

这是它的外观:

N = 3
---***---***---     
--*****-*****--       
-***-*****-***-      
***---***---***  
N = 5
-----*****-----*****–––––-----*****-----*****–––––
----*******---*******--------*******---*******----
---*********-*********------*********-*********---
--*****-*********-*****----*****-*********-*****--
-*****---*******---*****--*****---*******---*****-
*****-----*****–----**********-----*****–----*****

N = 7
-------*******-------*******--------------*******-------*******-------
––––––*********-----*********––––––––––––*********-----*********––––––
-----***********---***********----------***********---***********-----
----*************-*************--------*************-*************----
---*******-*************-*******------*******-*************-*******---
--*******---***********---*******----*******---***********---*******--
-*******-----*********-----*******--*******-----*********-----*******-
*******-------*******-------**************-------*******-------*******

1 个答案:

答案 0 :(得分:0)

好的,我可以给你一些线索。

通常,您需要定义为 ROW 1个父循环,该循环将打印M的每一行以及定义为 COL 的嵌套循环将结果与'*'或'-'连接起来。

for (let row = n; row >= 0; row -= 1)

在ROW内,您需要其他构造来检查行号,并且必须检查您是在M的顶部还是底部,即您必须将M分为2部分顶部底部

在ROW 内部,您需要定义为 COL 的嵌套循环,以便可以使用 COL

合并结果 简而言之,在每个嵌套循环中,您必须将结果+ ='*'或'-'连接起来; 并且必须在每行上连接结果+ ='\ r \ n',即换行

TOP部分是:

---***---***---     
--*****-*****-- 

底部部分是:

-***-*****-***-      
***---***---***

因此您具有如果(顶部)其他(底部)逻辑

在顶部/底部逻辑中,您必须弄清楚模式,即您拥有多少个星星/破折号,并它们如何在每个行上增加/减少< / strong>。

一些可以帮助您的变量:

const n = 7;
const middle = Math.ceil(n / 2);
let  asterisksTopLength = n;
let asterisksBottomLength = n - 1;
let dashesBottomLength = 1;
let dashesTopLength = n;
let result = '';

提示:您需要在TOP / BOTTOM内部的每个ROW上更改破折号/星号变量

也尝试将任务划分为几个小任务。即尝试找出如何首先打印破折号,即

---
--
-

然后如何将上面的破折号与'*'连接起来,使它们变成

---***
--*****
-***

等...

顺便说一句,有一个没有嵌套循环的解决方案,即仅使用1个循环,就像您已经了解了string.repeat()一样,但是我相信您的任务是练习嵌套循环,因此您必须避免.repeat()。 / p>