Построение треугольника с вложенными петлями

1

Я пытаюсь построить треугольник, используя вложенные циклы.

var line, triangle;
line = triangle = "";

for (var row = 1; row <= 7; row++) {
  for (var x = 0; x < row; x++) {
    line += "#";
  }
  triangle += line + "\n";
}

console.log(triangle);

Я ожидал, что каждая строка больше, чем последняя, только одним "#" следующим образом:
Изображение 174551

Но это результат, который я получил:
Изображение 174551

  • 1
    Вы, вероятно, хотите начать с пустой строки.
  • 1
    Вам не нужно две петли для этого. Сохраните две переменные, одну для результата и другую для текущей строки. Добавлять текущую строку к результату каждого цикла
Показать ещё 1 комментарий
Теги:
loops

4 ответа

2
Лучший ответ

Причина, по которой ваш код делает это, заключается в том, что вы обновляете line на каждой итерации и добавляете ее к ней. Если вы хотите делать вложенные циклы, вам нужно сбросить переменную строку каждый раз, когда вы находитесь во внешнем цикле.

var line, triangle;
line = triangle = "";

for (var row = 1; row <= 7; row++) {
  line =""
  for (var x = 0; x < row; x++) {
    line += "#";
  }
  triangle += line + "\n";
}

console.log(triangle);

Или вы можете сохранить то, что у вас есть, и сбросить внутренний цикл, и на каждой итерации вы просто добавите один символ в строку.

var line, triangle;
line = triangle = "";

for (var row = 1; row <= 7; row++) {
  line += "#";
  triangle += line + "\n";
}

console.log(triangle);
  • 0
    Это намного чище. Спасибо
  • 0
    Этот второй фрагмент особенно чист. Мне нравится, что я оптимизирован по сложности времени
2

Перед каждой вложенной итерацией необходимо очистить строку. Без этого у вас есть одна строка и каждый раз объединяет в нее новые элементы. Также вы можете оставить переменную line и просто использовать triangle.

var triangle = '';

for (var row = 1; row <= 7; row++) {
  for (var x = 0; x < row; x++) {
    triangle += "#";
  }
  triangle += "\n";
}

console.log(triangle);

Вы также можете попробовать это решение с помощью String # repeat

var triangle = '';

for (var row = 1; row <= 7; row++) {
  triangle += '#'.repeat(row) + '\n';
}

console.log(triangle);
  • 0
    Интересно! Я прочитаю о String # repeat
1

EDIT: Исправлено, просто добавив одну строку - вам нужно повторно инициализировать переменную "строка" после каждой итерации строк

var line, triangle;
line = triangle = "";

for (var row = 1; row <= 7; row++) {
  line="";
  for (var x = 0; x < row; x++) {
    line += "#";
  }
  triangle += line + "\n";
}

console.log(triangle);
  • 0
    Я сделал это, но это более читаемый способ, спасибо
0

Попробуйте код ниже:

function generatePyramid() {
    var totalNumberofRows = 7;
    var output="";
    for (var i = 1; i <= totalNumberofRows; i++) {
        for (var j = 1; j <= i; j++) {
            output+= "#  ";
        }
        print(output);
        output="";
    }
}  
generatePyramid();

Как это работает: http://rextester.com/ULY85622

Ещё вопросы

Сообщество Overcoder
Наверх
Меню