Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Sisäkkäiset Silmukat | Silmukat
JavaScript Ninja

book
Sisäkkäiset Silmukat

Tässä luvussa tutkimme sisäkkäisten silmukoiden käsitettä. Sisäkkäiset silmukat ovat silmukoita silmukoiden sisällä, ja ne ovat tehokas työkalu ohjelmoinnissa, joka mahdollistaa toistuvien toimien suorittamisen jäsennellyllä tavalla. Käyttämällä sisäkkäisiä silmukoita voimme tehokkaasti navigoida ja käsitellä monimutkaisia rakenteita, kuten ruudukoita, mikä on juuri sitä, mitä Ninjamme tekee tässä luvussa.

Kuvittele Ninjamme liikkuvan ruudukossa keräten sushia. Ruudukko koostuu riveistä ja sarakkeista, ja tavoitteemme on kerätä kaikki ruudukkoon hajallaan oleva sushi. Tämän saavuttamiseksi voimme käyttää sisäkkäisiä silmukoita: yksi silmukka liikkumaan rivien poikki ja toinen silmukka liikkumaan jokaisen sarakkeen läpi.

Katsotaanpa esimerkkiä ymmärtääksemme, miten sisäkkäiset silmukat toimivat Ninja-pelimme kontekstissa:

ninja.js

ninja.js

copy
function ninjaController(ninja) {
ninja.goLeft();
while (ninja.objectRight() !== "wall") {
lootColumn(ninja);
ninja.goRight();
}
lootColumn(ninja);
}

function lootColumn(ninja) {
let steps = 0;
while (ninja.objectUp() === "sushi") {
ninja.pickSushi();
ninja.goUp();
steps++;
}
ninja.pickSushi();
for (let i = 0; i < steps; i++) {
ninja.goDown();
}
}

Yllä olevassa esimerkissä meillä on kaksi funktiota: ninjaController ja lootColumn. ninjaController-funktio käyttää while-silmukkaa liikuttaakseen Ninjaa ruudukon poikki vasemmalta oikealle. Jokaiselle sarakkeelle se kutsuu lootColumn-funktion, joka sisältää toisen while-silmukan liikuttaakseen Ninjaa ylöspäin, keräten sushia matkalla. Kun Ninja saavuttaa sarakkeen yläosan, se käyttää for-silmukkaa palatakseen alkuperäiseen asemaansa.

Sisäkkäistämällä while-silmukan lootColumn-funktion sisällä while-funktion ninjaController-silmukassa, voimme tehokkaasti kerätä kaikki sushi jokaisessa sarakkeessa ennen siirtymistä seuraavaan.

Tehtävä

Swipe to start coding

Ratkaisu

function ninjaController(ninja) {
lootRow(ninja);
while (ninja.objectUp() === "sushi") {
ninja.goUp();
lootRow(ninja);
}
}
function lootRow(ninja) {
let movedRight = 0;

ninja.pickSushi();
while (ninja.objectRight() === "sushi") {
ninja.pickSushi();
ninja.goRight();
movedRight++;
}
ninja.pickSushi();

for (let i = 0; i < movedRight; i++) {
ninja.goLeft();
}
}

Tutustu muihin kursseihin luettelossa

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 4
ninja.js

ninja.js

function ninjaController(ninja) {
// Write your code below
}

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

We use cookies to make your experience better!
some-alt