Zászlók kezelése JavaScriptben
Most megtanuljuk, hogyan kell dolgozni zászlókkal.
A zászló egy speciális változó, amely
csak két értéket vehet fel: true
és false. Zászlók segítségével megoldhatunk
olyan feladatokat, amelyek valaminek a hiányát ellenőrzik:
például ellenőrizhetjük, hogy egy tömbben
nincs-e egy adott értékű elem. Kezdjük is el.
Oldjuk meg a következő feladatot: adott egy tömb
számokkal, ellenőrizni kell, hogy van-e benne
3 értékű elem vagy sem. Ha
van - írjuk ki a '+++' szöveget, ha nincs -
írjuk ki a '---' szöveget.
Először próbáljuk meg kiírni a '+++' szöveget.
Ehhez menjünk végig a tömb összes elemén
és egy feltétellel kérdezzük meg - egyenlő-e az aktuális
elem a 3 értékkel. Ha egyenlő - írjuk ki
a '+++' szöveget:
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
}
}
De a megoldásunk nem túl jó: hiszen ha
a tömbben nem egy 3 értékű elem lesz,
hanem több, akkor a '+++' szöveg többször
fog kiíródni. Javítsuk a tömbünket (tegyünk bele
két 3 értékű elemet) és győződjünk meg erről:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // többször fog kiíródni
}
}
Javítsuk a problémát: szakítsuk meg a ciklust a
break utasítással, ha az elemet már megtaláltuk:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
break; // megszakítjuk a ciklust
}
}
Most próbáljuk meg megtenni, hogy
ha a tömben egyáltalán nincs 3 értékű
elem, akkor a '---' szöveg íródjon ki. Gyakori
tévedés, hogy else ágat
adunk a feltételünkhöz - ebben az esetben a '---' szöveg
minden, 3 értékűtől különböző elemre
kiíródik:
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // a 3-as elemnél íródik ki
} else {
console.log('---'); // az 1, 2, 4, 5 elemeknél íródik ki
}
}
Tehát az else ág hozzáadásának ötlete - rossz
ötlet, nem működik. Az ilyen típusú feladatok
megoldásához (az ilyen feladatok elég gyakoriak) használják az úgynevezett zászlókat.
Ahogy fentebb már említettük, a zászló egy olyan
változó, amely csak két értéket vehet fel:
true vagy false.
Tehát készítsünk egy flag változót
a következő jelentéssel: ha egyenlő true-val,
akkor a tömbben van 3 értékű elem, ha pedig
false, akkor nincs ilyen elem.
Kezdetben állítsuk a flag változót
false értékre - azaz feltételezzük,
hogy a 3 értékű elem nincs a tömbben:
let arr = [1, 2, 3, 4, 5];
let flag = false; // feltételezzük, hogy a 3-as elem nincs a tömbben
Ezután indítsuk el a ciklust a feltétellel, ahogy azt korábban
tettük. Ha a ciklus felfedezi, hogy a tömbben
van 3 értékű elem - akkor állítsuk a flag
változót true értékre és lépjünk ki a ciklusból
a break utasítással:
let arr = [1, 2, 3, 4, 5];
let flag = false; // feltételezzük, hogy a 3-as elem nincs a tömbben
for (let elem of arr) {
if (elem == 3) {
flag = true; // az elem megtalálható - újradefiniáljuk a flag változót
break; // kilépünk a ciklusból
}
}
A arra a kérdésre, hogy van-e a tömbben 3
értékű elem vagy sem, csak a ciklus után tudunk válaszolni.
És ez a válasz már megvan: a ciklus után
a flag változó vagy false értéken marad,
vagy true értékre változhat,
ha a ciklus felfedezett a tömbben 3 értékű elemet:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
// itt a flag változó vagy true, vagy false
Most a ciklus után készíthetünk egy feltételt, amely
ránéz a flag változóra és kiírja
a '+++' vagy a '---' szöveget:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
if (flag === true) {
console.log('+++');
} else {
console.log('---');
}
Adott egy tömb:
let arr = ['a', 'b', 'c', 'd', 'e'];
Ellenőrizd, hogy ebben a tömbben van-e
'c' értékű elem.
Ha van - írd ki a '+++' szöveget,
ha nincs - írd ki a '---' szöveget.
Írj kódot, amely ellenőrzi, hogy egy szám prím-e vagy sem. Egy prím szám csak eggyel és önmagával osztható, más számokkal nem.