Pytanie Jak uzyskać pierwszą część tego podstawowego ćwiczenia pętlowego?


Uczę się Javascript z książki Eloquent Javascript by Marijn Haverbeke, ćwiczenia na końcu drugiego rozdziału (Struktura programu). Napisz pętlę, która wywołuje siedem wywołań console.log, aby wyprowadzić następujący trójkąt:

#
##
###
####
#####
######
#######

Próbowałem go rozwiązać jak przy użyciu pętli for.

var hash = "#";

for(counter = 0; counter < 8; counter ++)
{

   hash = hash + "#";

   console.log(hash);

}

Problem polega na tym, że pokazuje się nie pokazując pierwszego wiersza wymaganego wyniku, jak mam to uzyskać?

Byłbym wdzięczny za wszelkie rozwiązania, szczególnie jeśli chodzi o małe wyjaśnienie.


14
2018-02-19 20:28


pochodzenie


Jest to jedno z tych kilku pytań noobowych, które jestem gotów upomnieć wyłącznie ze względu na to, że właściwie go zapytałeś. Wyraźnie pokazuje pytanie, problem, próbę i rzeczywistą wydajność w stosunku do oczekiwań. Nie podawaj dobrze zadawanych pytań - zamknij w razie potrzeby, ale nie odrzucaj. - Sterling Archer
Witamy w załodze JS. Zdecydowanie zaakceptuj odpowiedź gimbel0893. Deklaracja zmiennej jako pustego ciągu jest drogą do zrobienia. - Trasiva
Dobra robota, @Mohil, witaj w StackOverflow! Jedna drobna sugestia: zazwyczaj chcesz, aby zmienne pętli były lokalne, więc for(var counter... byłoby lepiej. - georg
@SterlingArcher Zgadzam się, to było dobrze zadawane, ale nadal ... trochę debugowania wykazałyby problem. - John Dvorak
Proszę przegłosować pytania, które są przydatny lub przynajmniej pokazać wysiłek badawczy, a nie tylko pytania, które są dobrze zadawane. W przypadku pytań, które nie są dobrze zadawane, są downvotes. Czy chcesz, aby był to pierwszy wynik Google, gdy ktoś szuka dla "Zrozumienia pętli for w strukturze programu"? - John Dvorak


Odpowiedzi:


Twój kod jest wykonywany "od góry do dołu".

W twojej pętli for pierwsza iteracja dodaje # do już zadeklarowanego skrótu var i sprawia, że ​​jest ##, a to zostaje "zalogowane" przez konsolę.

Wszystko, co musisz zrobić, to umieścić console.log (hash) przed hash = hash + "#".

console.log(hash);
hash = hash + "#";

Zapewni to, że w pierwszej iteracji przede wszystkim "#" będzie "zalogowany" i tylko wtedy hash = hash + "#" będzie działał :)


6
2018-02-19 20:43



Dodam jednak, że może powinieneś spróbować zacząć od pustego ciągu, tak jak "licznik" powinien zaczynać się od zera, oszczędza wiele takich "incydentów" :) - Toyi


Dobra robota, odkąd dopiero zaczynasz.

Prawie to masz. Po prostu zadeklaruj zmienną jako pusty ciąg.

// this is the line that needs to be changed
var hash = '';

for(....) {
  hash += "#";
  console.log(hash);
}

W ten sposób, gdy dodasz do zmiennej "hash" wewnątrz pętli, nie ma ona dodatkowego "#" z deklaracji zmiennej.


12
2018-02-19 20:31





Natychmiast łączycie to z hash. Wyloguj się z wartości początkowej przed pętlą.

console.log(hash);
for ...

4
2018-02-19 20:29



Lub zainicjuj hash jako pusty - Dave X
To też by działało, tak. - Sterling Archer
tak, albo to też zadziała - gimbel0893


Mogę się spóźnić, ale robiąc to marnujesz jedną postać (dziewiątą).

zainicjuj w ten sposób

hash = '';

i jesteś dobry, aby iść ... :)


1
2018-03-04 07:31





var grid = "#"
for(i = 1; i < 8; i++){
    console.log(grid.repeat(i));
}

0
2017-10-23 16:19