Итерация цикла Консольное изображение JavaScript - PullRequest
0 голосов
/ 06 мая 2019

Я новичок в Javascript и супер новичок в 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 голосов
/ 06 мая 2019

Хорошо, я могу дать вам несколько подсказок.

Как правило, вам нужно 1 родительский цикл , определенный как ROW , который печатает каждую строку M и вложенного цикла (s).) определяется как COL , используемый для конкатенации результата с '*' или '-'.

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

внутри ROW, если вам нужна конструкция else для проверки номера строки и проверкиесли вы находитесь на вершине M или внизу, т.е. , вам нужно разделить M на 2 части , TOP и BOTTOM .

Внутри ROW вам нужны вложенные циклы , определенные как COL , чтобы вы могли объединить результат, используя COL

Короче говоря в каждомвложенный цикл, вы должны объединить результат + = '*' или '-';и в каждой строке вы должны объединить результат + = '\ r \ n', т.е. новая строка .

Верхняя часть:

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

Нижняя часть:

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

, поэтому у вас есть if (top) else (bottom) logic

Внутри логики TOP / BOTTOM вы должны выяснить схему т.е. сколько у вас звезд / тире и как они увеличивают / уменьшают на каждом ROW.

Некоторые переменные, которые могут вам помочь:

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, если это не тело

Попробуйте также разделить задачу на несколько небольших задач.то есть попытаться выяснить, как сначала печатать тире, т.е.

---
--
-

, а затем как конкатенировать тире выше с помощью *, чтобы они стали

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

и т. д.

Кстати, есть решение без вложенных циклов, то есть использование только 1 цикла и, как вы уже выяснили, string.repeat (), но я считаю, что ваша задача - попрактиковаться во вложенных циклах, поэтому вам следует избегать .repeat ().

...