Wat gaat er fout in dit stukje code? (basis)

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • BramCoding
  • Registratie: Maart 2016
  • Laatst online: 07-08 14:16
Hoi allen. Ik ben beginnend met PHP maar stootte tegen volgend probleempje. Ik heb code geschreven die 2 dobbelstenen moet laten rollen en wanneer ze beide 6 zijn mag stoppen met rollen;

code:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$worp1 = 0;
$worp2 = 0;

do{
    $worp1 = rand(1,6);
    $worp2 = rand(1,6);
    $totaal = $worp1 + $worp2;
    echo "Je gooide de twee dobbelstenen en deze kwamen uit als; $worp1 en $worp2<br/>";
}while( ($worp1 != 6) && ($worp2 != 6) );
echo "Proficiat, je gooide $worp1 en $worp2";
?>


Nu mijn probleem; van zodra er 1 dobbelsteen 6 gooit gaat hij al uit de while-lus. Mijn gok is dus dat dit iets te maken heeft met de "&&". Althans als ik dit opzoek zou dit ook in PHP moeten werken.
Ik kan dit wel omzeilen door $totaal te gaan gebruiken in mijn while-test maar ik zou graag weten waarom dit niet werkt.

Als ik het goed begrijp zeg ik nu; doe de eerste keer de lus en controleer dan of worp1 verschillend is van 6 & of worp2 verschillend is van 6. Als deze beide verschillend zijn van 6, doe de lus dan opnieuw. Als deze beiden gelijk zijn aan 6 --> spring uit de lus.

Waarschijnlijk een heel makkelijke vraag voor velen onder jullie, maar je moet ergens beginnen natuurlijk.

Bram

Beste antwoord (via BramCoding op 06-04-2017 17:23)


  • Egocentrix
  • Registratie: Januari 2011
  • Laatst online: 16-09 17:56

Egocentrix

Parttime zeurkous

Tip: zet je code tussen [code]-tags, dan krijg je fancy opmaak :P

Wat hier misgaat zit inderdaad in je &&. Denk maar eens goed na wat hier precies gebeurt. Je loop wordt herhaald als worp1 geen 6 is, EN worp2 geen 6.

Ga voor jezelf eens na wat dit betekent als worp1 = 6 en worp2 = 5 :)

The above message has been encrypted using a quadruple ROT13-algorithm. --- Bad grammar makes me sic.

Alle reacties


Acties:
  • +1 Henk 'm!

  • sys64738
  • Registratie: Oktober 2002
  • Laatst online: 13:50

sys64738

Moderator Foto & Video

Press play on tape

Vaag. Zie het niet.... maar dat ligt meer aan mijn PHP skills vrees ik.

Maar is het niet gewoon handiger om te checken of je in totaal geen 12 gegooid hebt? Korter en ook prima leesbaar.

Flickr | Photography 101: Skills > Patience > Gear


Acties:
  • Beste antwoord
  • +4 Henk 'm!

  • Egocentrix
  • Registratie: Januari 2011
  • Laatst online: 16-09 17:56

Egocentrix

Parttime zeurkous

Tip: zet je code tussen [code]-tags, dan krijg je fancy opmaak :P

Wat hier misgaat zit inderdaad in je &&. Denk maar eens goed na wat hier precies gebeurt. Je loop wordt herhaald als worp1 geen 6 is, EN worp2 geen 6.

Ga voor jezelf eens na wat dit betekent als worp1 = 6 en worp2 = 5 :)

The above message has been encrypted using a quadruple ROT13-algorithm. --- Bad grammar makes me sic.


Acties:
  • +2 Henk 'm!

Verwijderd

while ($worp1 != 6 || $worp2 != 6);

Acties:
  • 0 Henk 'm!

  • BramCoding
  • Registratie: Maart 2016
  • Laatst online: 07-08 14:16
Egocentrix schreef op donderdag 6 april 2017 @ 17:18:
Tip: zet je code tussen [code]-tags, dan krijg je fancy opmaak :P

Wat hier misgaat zit inderdaad in je &&. Denk maar eens goed na wat hier precies gebeurt. Je loop wordt herhaald als worp1 geen 6 is, EN worp2 geen 6.

Ga voor jezelf eens na wat dit betekent als worp1 = 6 en worp2 = 5 :)
Tip1; bedankt, test dit hierna even uit.
Over het antwoord; ik denk dat ik het snap. Ik zeg dat hij moet herhalen wanneer worp1 geen 6 is én worp2 ook geen 6. Maar als worp1 wel 6 is springt die er dus direct uit, want er is niet aan de voorwaarde voldaan dat beiden verschillend moeten zijn van 6.
Ik moet dus gewoon simpelweg de "of" aka "||" gebruiken?

Acties:
  • 0 Henk 'm!

  • BramCoding
  • Registratie: Maart 2016
  • Laatst online: 07-08 14:16
Opgelost, bedankt voor de snelle hulp!

Acties:
  • +1 Henk 'm!

  • Egocentrix
  • Registratie: Januari 2011
  • Laatst online: 16-09 17:56

Egocentrix

Parttime zeurkous

Nog één opmerking erover: Wat je eigenlijk wilt is de loop herhalen zolang ze niet beiden 6 zijn, oftewel
PHP:
1
while ( !(($worp1 == 6) && ($worp2 == 6)) )


Logisch betekent dat precies hetzelfde als
PHP:
1
while ( ($worp1 != 6) || ($worp2 != 6) )

The above message has been encrypted using a quadruple ROT13-algorithm. --- Bad grammar makes me sic.


Acties:
  • +1 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 14:57

Dido

heforshe

Op zich heeft sys64738 wel een goed punt. Temeer daar je nu, zonder enige reden, het totaal van je worpen berekent (je doet er niets mee!)

In plaats van een gecombineerde vergelijking kun je inderdaad gewon uit je loop springen als $totaal == 12;

Wat betekent mijn avatar?


Acties:
  • +3 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Laatst online: 02:46

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Egocentrix schreef op donderdag 6 april 2017 @ 17:26:
Nog één opmerking erover: Wat je eigenlijk wilt is de loop herhalen zolang ze niet beiden 6 zijn, oftewel
PHP:
1
while ( !(($worp1 == 6) && ($worp2 == 6)) )


Logisch betekent dat precies hetzelfde als
PHP:
1
while ( ($worp1 != 6) || ($worp2 != 6) )
De welbekende Captain Morgan DeMorgan rule :Y

[ Voor 6% gewijzigd door Orion84 op 06-04-2017 17:32 ]

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


Acties:
  • +3 Henk 'm!

  • PhoeniX1992
  • Registratie: Augustus 2007
  • Laatst online: 01-08 14:54
Ligt het aan mij of is

PHP:
1
 while ( $totaal != 12 )


niet de allermakkelijkste oplossing?

[ Voor 6% gewijzigd door PhoeniX1992 op 07-04-2017 15:28 ]


Acties:
  • 0 Henk 'm!

  • Wim-Bart
  • Registratie: Mei 2004
  • Laatst online: 10-01-2021

Wim-Bart

Zie signature voor een baan.

PhoeniX1992 schreef op vrijdag 7 april 2017 @ 15:26:
Ligt het aan mij of is

PHP:
1
 while ( $totaal != 12 )


niet de allermakkelijkste oplossing?
En de snelste, minder vergelijkingen :-)

Beheerders, Consultants, Servicedesk medewerkers. We zoeken het allemaal. Stuur mij een PM voor meer info of kijk hier De mooiste ICT'er van Nederland.


Acties:
  • +1 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:14

Creepy

Tactical Espionage Splatterer

Altijd een gevaarlijke uitspraak. Als je het totaal niet hoeft te berekenen dan zijn de 2 vergelijking misschien wel sneller. Maar goed, als je je met dit soort micro optimalisaties kan bezighouden dan zit de rest van je code blijkbaar al perfect in elkaar ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • BramCoding
  • Registratie: Maart 2016
  • Laatst online: 07-08 14:16
Ik had het zelf inderdaad zo opgelost, maar dan nog wou ik graag weten wat er fout liep als ik het op die andere manier wou doen. Het gaat hier niet zozeer om het resultaat, maar om het verstaan wat er net gebeurde. Ben nog volop in het leerproces, en wou graag een verduidelijking.
Was uiteindelijk een domme redeneringsfout, maar die zal ik nu (hopelijk) niet meer maken.
Bedankt voor de vele hulp/reacties!
Pagina: 1