Toon posts:

Beginnende Javascript vraag

Pagina: 1
Acties:

Vraag


  • Zironako
  • Registratie: Oktober 2013
  • Laatst online: 07-06 19:17
Mijn vraag
Hallo, ik ben recent begonnen met het leren van Javascript. Nu ben ik een scriptje aan het maken met een if-statement die het Amerikaanse cijfersysteem berekent aan de hand van een score die je invult. Echter, hij geeft bij alles boven de 90 netjes A aan, maar alles daaronder B. Als ik naar de code kijk, snap ik echt niet waarom het niet wilt werken en ik hoop dus dat iemand me hier mee kan ondersteunen. De code is als volgt:

let score = 65

if (score >= 90){
console.log('A')
} else if (score >= 80 || score <= 89){
console.log('B')
} else if (score >= 70 || score <= 79){
console.log('C')
} else if (score >= 60 || score <= 69){
console.log('D')
} else{
console.log('F')
}

Hij geeft dus altijd de waarde van B aan, ondanks dat ik score 65 invul als voorbeeld.

Alle reacties


  • frickY
  • Registratie: Juli 2001
  • Laatst online: 06-06 23:09
Dat komt omdat je || gebruikt, een logcal OR.
65 is lager dan 89. Dus je 2e conditie evalueert naar true.

Wat je wilt is een logcal AND; &&
De waarde moet hoger zijn dan 80 én lager dan 89.

Maar die lager dan kun je ook weg laten, want je hebt daarvoor al gecontroleerd of hij 90 was of hoger, dus je weet al dat hij 89 is of lager.

[Voor 56% gewijzigd door frickY op 08-10-2018 13:20]


  • Zironako
  • Registratie: Oktober 2013
  • Laatst online: 07-06 19:17
frickY schreef op maandag 8 oktober 2018 @ 13:18:
Dat komt omdat je || gebruikt, een logcal OR.
65 is lager dan 89. Dus je 2e conditie evalueert naar true.

Wat je wilt is een logcal AND; &&
De waarde moet hoger zijn dan 80 én lager dan 89.

Maar die lager dan kun je ook weg laten, want je hebt daarvoor al gecontroleerd of hij 90 was of hoger, dus je weet al dat hij 89 is of lager.
Ah, wat dom zeg! Ik heb net letterlijk een half uur naar de code staan staren met de handen in het haar waarom het niet werkt en dan is de fout zo dom. Hartelijk bedankt!

  • Paul
  • Registratie: September 2000
  • Laatst online: 21:17
Met je code tussen
[code=js][/code]
-tags wordt het wat leesbaarder :)
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
let score = 65

if (score >= 90){
    console.log('A')
} else if (score >= 80 || score <= 89){
    console.log('B')
} else if (score >= 70 || score <= 79){
    console.log('C')
} else if (score >= 60 || score <= 69){
    console.log('D')
} else{
    console.log('F')
}

Als je stap voor stap kijkt wat het doet dan kom je tot dezelfde conclusie als @frickY, (groter of gelijk 80) OF (kleiner of gelijk 89), false OR true == true

Het is wel een beetje dubbel-op, eenmaal bij de C kan het al nooit meer hoger zijn dan 79 (tenzij je iets multi-threaded maakt wat 'score' aanpast, maar dan is dit niet de manier om daar mee om te gaan :P):
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
let score = 65

if (score >= 90){
    console.log('A')
} else if (score >= 80){
    console.log('B')
} else if (score >= 70){
    console.log('C')
} else if (score >= 60){
    console.log('D')
} else{
    console.log('F')
}

[Voor 31% gewijzigd door Paul op 08-10-2018 13:24]

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • Richh
  • Registratie: Augustus 2009
  • Laatst online: 00:11
Om het op te lossen zou je dus in plaats van '||', '&&' moeten gebruiken ;)

Je zou voor deze situatie ook eens kunnen kijken naar een switch-case oplossing.

  • Zironako
  • Registratie: Oktober 2013
  • Laatst online: 07-06 19:17
Paul schreef op maandag 8 oktober 2018 @ 13:21:
Met je code tussen
~~[code=js]~~[/code]
-tags wordt het wat leesbaarder :)
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
let score = 65

if (score >= 90){
    console.log('A')
} else if (score >= 80 || score <= 89){
    console.log('B')
} else if (score >= 70 || score <= 79){
    console.log('C')
} else if (score >= 60 || score <= 69){
    console.log('D')
} else{
    console.log('F')
}

Als je stap voor stap kijkt wat het doet dan kom je tot dezelfde conclusie als @frickY, (groter of gelijk 80) OF (kleiner of gelijk 89), false OR true == true

Het is wel een beetje dubbel-op, eenmaal bij de C kan het al nooit meer hoger zijn dan 79 (tenzij je iets multi-threaded maakt wat 'score' aanpast, maar dan is dit niet de manier om daar mee om te gaan :P):
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
let score = 65

if (score >= 90){
    console.log('A')
} else if (score >= 80){
    console.log('B')
} else if (score >= 70){
    console.log('C')
} else if (score >= 60){
    console.log('D')
} else{
    console.log('F')
}
Top, bedankt voor de tip ga ik de volgende keer doen!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 06:49

CurlyMo

www.pilight.org

En goed leren debuggen. Met staren alleen kom je er meestal niet, want je blijft in je eigen denkpatroon hangen.

Als je de if/else langzaam had opgebouwd door te beginnen met:
JavaScript:
1
2
3
4
5
6
7
let score = 65;

if (score >= 60 || score <= 69){
console.log('D')
} else{
console.log('F')
}

Dan had je gezien dat elk van je condities dezelfde fout had.

Als je de fout dan alsnog niet door had gehad, dan had je de initiële score kunnen afbouwen door bijv. te beginnen bij 100 en dan in een loop naar 0 te gaan. Dan had je ook direct gezien dat hij bij alle waardes onder de 89, richting B was gegaan.

Als laatste had je nog je if/else tijdelijk kunnen omzetten naar meerdere if statements:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
let score = 65

if (score >= 90){
console.log('A')
} 
if (score >= 80 || score <= 89){
console.log('B')
} 
if (score >= 70 || score <= 79){
console.log('C')
} 
if (score >= 60 || score <= 69){
console.log('D')
}

Dan had je ook gezien dat alle condities behalve A altijd als waar evalueerden.

Het zou ook geholpen kunnen hebben je condities zo te herschrijven:
JavaScript:
1
if (60 <= score || score <= 69) ...

geen vragen via PM die ook op het forum gesteld kunnen worden.


  • Fontini
  • Registratie: Februari 2012
  • Laatst online: 04-06 12:39
Ik vermoed dat je geen 'is groter of gelijk aan' operator nodig hebt. Een kleiner dan is misschien voldoende. Of zie ik iets over het hoofd? Het blijft overigens nog steeds een good practice om semi-colons ( ; ) te blijven gebruiken (klein voorbeeld waarom hier).

Edit: je kunt natuurlijk 0 - 50 weghalen.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
let score = 90; // = J

if ( score < 10 ) { // 0 - 9
    console.log('A');
} else if ( score < 20 ) { // 10 - 19
    console.log('B');
} else if ( score < 30 ) { // 20 - 29
    console.log('C');
} else if ( score < 40 ) { // 30 - 39
    console.log('D');
} else if ( score < 50 ) { // 40 - 49
    console.log('E');
} else if ( score < 60 ) { // 50 - 59
    console.log('F');
} else if ( score < 70 ) { // 60 - 69
    console.log('G');
} else if ( score < 80 ) { // 70 - 79
    console.log('H');
} else if ( score < 90 ) { // 80 - 89
    console.log('I');
} else if ( score < 100) { // 90 - 99 hier wil je misschien wel <= gebruiken.
    console.log('J');
}

[Voor 4% gewijzigd door Fontini op 12-10-2018 14:16]

Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee