Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

2<1 wordt geaccepteerd?

Pagina: 1
Acties:

  • Hatsieflatsie
  • Registratie: Oktober 2011
  • Laatst online: 20-11 21:25
Onlangs zag ik een creatief staaltje programmeerwerk:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class PoolPuzzleOne {
public static void main(String [] args) {
int x = 0;
while ( x < 4 ) {
System.out.print("a");
if ( x < 1 ) {
System.out.print(" ");
}
System.out.print("n");
if ( x > 1 ) {
System.out.print(" oyster");
x = x + 2;
}
if ( x == 1 ) {
System.out.print("noys");
}
if ( x < 1 ) {
System.out.print("oise");
}
System.out.println("");
x = x + 1;
}
}
}


Dit levert de volgende output op:
a noise
annoys
an oyster
Slim bedacht, slim. Maar wat ik niet begrijp, is het volgende:

if ( x < 1 ) {
System.out.print("oise");

Kennelijk wordt de "oise" wel gecompliceerd, terwijl de x 2 zou moeten zijn (x = x +2), en dus niet voldoet aan de x < 1.

Ik kan hier niet ontdekken waar ik de fout in ga? :?

Twiekers die hierop mij van een antwoord kunnen voorzien?

  • Brummetje
  • Registratie: December 2003
  • Niet online

Brummetje

Ginkeltjes

Niet helemaal... de x = x + 2 wordt pas na 2 keer of zo aangeroepen.. deze zit namelijk in

if ( x > 1 )

En in het begin is deze natuurlijk nog gewoon 0.. Dus niet hoger dan 1


Even de code wat netter:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class PoolPuzzleOne 
{ 
    public static void main(String [] args) 
    { 
        int x = 0; 
        while ( x < 4 ) 
        { 
            System.out.print("a"); 
            
            
            // Deze gaat dus direct omdat x begint lager dan 1
            if ( x < 1 ) 
            { 
                System.out.print(" "); 
            } 
            System.out.print("n"); 
            
            
            // Deze gebeurd de eerste keer dus niet want x = 0 
            if ( x > 1 ) 
            { 
                System.out.print(" oyster"); 
                x = x + 2; 
            } 
            
            // x is hier ook nog steeds 0 dus ook deze gebeurd nog niet.
            if ( x == 1 ) 
            { 
                System.out.print("noys"); 
            } 
            
            // x is lager dan 1 dus deze zal geprint worden.
            if ( x < 1 ) 
            { 
                System.out.print("oise"); 
            } 
            System.out.println(""); 
            x = x + 1; 
        } 
    } 
}

[ Voor 69% gewijzigd door Brummetje op 11-07-2013 12:46 . Reden: Code toegevoegd ]


  • naitsoezn
  • Registratie: December 2002
  • Niet online

naitsoezn

Nait Soez'n!

Je moet je code even correct laten inspringen, dan zie je makkelijker welke blokken bij elkaar horen en welke (mogelijk) overgeslagen worden. Die x+2 wordt alleen gedaan als x > 1

't Het nog nooit, nog nooit zo donker west, of 't wer altied wel weer licht


Verwijderd

Je x = x +2 staat binnen de haakjes en wordt dus alleen uitgevoerd indien x > 1

Zo dus
if ( x > 1 ) {
System.out.print(" oyster");
x = x + 2;
}

Initieel heeft x de waarde 0, deze wordt aan het einde verhoogd naar 1
Dan de 2e keer in de lus wordt er "noys" gemaakt en wordt x verhoogd naar 2
Pas dan voldoet de voorwaarde x>1 en wordt "oyster"gemaakt en x verhoogd met 2 naar 4 en verder naar 5.

  • Hatsieflatsie
  • Registratie: Oktober 2011
  • Laatst online: 20-11 21:25
Ik zie hem nu. Het stond beetje onduidelijk.

Bedankt voor jullie input. :).