abonnement Unibet Coolblue
pi_182833111
quote:
2s.gif Op dinsdag 30 oktober 2018 12:00 schreef Bosbeetle het volgende:

[..]

Wat bij mij het probleem is ik maak code omdat ik het gebruik... en waarvoor ik het gebruik komt op mijn pad tijdens het maken van de code... en dat blijft zo door loopen. Ik zit niet in de positie om goed af te bakenen wat moet die software nou eigenlijk kunnen, en dat wil ik ook eigenlijk niet :D
Waarom wil je dat niet?

Ar cieņu Flip.
I think that it’s extraordinarily important that we in computer science keep fun in computing
For all who deny the struggle, the triumphant overcome
  Moderator dinsdag 30 oktober 2018 @ 12:16:09 #252
27682 crew  Bosbeetle
terminaal verdwaald
pi_182833347
quote:
16s.gif Op dinsdag 30 oktober 2018 12:02 schreef FlippingCoin het volgende:

[..]

Waarom wil je dat niet?

Ar cieņu Flip.
Omdat ik altijd vind dat we meer moeten kunnen dan ik van te voren bedacht....

Meestal schrijf ik programma's om data heen, dus als de data iets interesants laat zien wat ik van te voren niet bedacht had dan moet de software ineens meer kunnen.... Als je alles netjes dichttimmert krijg je nooit nieuewe functionaliteit... :P

Laatste paar stukjes software die ik geschreven heb zijn nearest neighbour analyses (zowel tussen twee puntensets of binnen één, en zowel los (elk punt heeft een dichte buurman) als strikt (elk punt kan maar aan één paar toe behoren).... Heb dit eindelijk eens goed in elkaar gezet omdat ik al tig scripts had waarin ik dit ook deed maar nu heb ik gewoon een goed stukje snelle code :D

heb trouwens wel een vraagje aan jullie, hoe kan ik dit handiger aanpakken:

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package Neigbours;

public class coordinates {

    double[] x,y,z,x2,y2,z2;
    double max;
    double[][] distmat;

    coordinates(double[] x, double[] y){
        this.x = x;
        this.y = y;
        MakeDistmat(x,y,null);
    }

    coordinates(double[] x, double[] y, double[] z){
        this.x = x;
        this.y = y;
        this.z = z;
        MakeDistmat(x,y,z);
    }

    coordinates(double[] x1, double[] y1, double[] x2, double[] y2){
        this.x = x1;
        this.y = y1;
        this.x2 = x2;
        this.y2 = y2;
        MakeDistmat(x1,y1,null,x2,y2,null);
    }

    coordinates(double[] x1, double[] y1, double[] z1, double[] x2, double[] y2, double[] z2){
        this.x = x1;
        this.y = y1;
        this.z = z1;
        this.x2 = x2;
        this.y2 = y2;
        this.z2 = z2;
        MakeDistmat(x1,y1,z1,x2,y2,z2);
    }

    private void MakeDistmat(double[] x, double[] y, double[] z){

        double[][] dmat = new double[x.length][x.length];

        if(z == null){
            z = new double[x.length];

            for(int i=0;i<z.length;i++){
                z[i] = 0;
            }

        }

        this.max = 0;

        for(int i=0;i<x.length;i++){
            for(int j=0;j<x.length;j++){
                dmat[i][j] = Math.sqrt( Math.pow(x[i]-x[j],2) + Math.pow(y[i]-y[j],2) + Math.pow(z[i]-z[j],2)  );

                if(dmat[i][j]>max){
                    this.max=dmat[i][j];
                }
            }
        }

        this.distmat = dmat;
    }

    private void MakeDistmat(double[] x1, double[] y1, double[] z1, double[] x2, double[] y2, double[] z2){

        double[][] dmat = new double[x1.length][x2.length];
        this.max = 0;

        if(z1 == null || z2 == null){

            z1 = new double[x1.length];
            z2 = new double[x2.length];

            for(int i=0;i<z1.length;i++){
                z1[i] = 0;

            }

            for(int i=0;i<z2.length;i++){
                z2[i] = 0;

            }


        }

        for(int i=0;i<x1.length;i++){
            for(int j=0;j<x2.length;j++){
                dmat[i][j] = Math.sqrt( Math.pow(x1[i]-x2[j],2) + Math.pow(y1[i]-y2[j],2) + Math.pow(z1[i]-z2[j],2)  );

                if(dmat[i][j]>max){
                    this.max=dmat[i][j];
                }
            }
        }

        this.distmat = dmat;
    }

}


Het probleem is ik heb dus datasets met een z coordinaat en zonder, en ik heb dus een distance matrix binnen 1 groep of tussen 2 groepen maar het voelt zo redundant.
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
pi_182833379
quote:
2s.gif Op dinsdag 30 oktober 2018 12:16 schreef Bosbeetle het volgende:

[..]

Omdat ik altijd vind dat we meer moeten kunnen dan ik van te voren bedacht....

Meestal schrijf ik programma's om data heen, dus als de data iets interesants laat zien wat ik van te voren niet bedacht had dan moet de software ineens meer kunnen.... Als je alles netjes dichttimmert krijg je nooit nieuewe functionaliteit... :P

Laatste paar stukjes software die ik geschreven heb zijn nearest neighbour analyses (zowel tussen twee puntensets of binnen één, en zowel los (elk punt heeft een dichte buurman) als strikt (elk punt kan maar aan één paar toe behoren).... Heb dit eindelijk eens goed in elkaar gezet omdat ik al tig scripts had waarin ik dit ook deed maar nu heb ik gewoon een goed stukje snelle code :D
Maar je kan toch abstraheren en uitbreidbaar ontwerpen?

आपला आभारी Flip.
I think that it’s extraordinarily important that we in computer science keep fun in computing
For all who deny the struggle, the triumphant overcome
  Moderator dinsdag 30 oktober 2018 @ 12:19:30 #254
27682 crew  Bosbeetle
terminaal verdwaald
pi_182833395
quote:
16s.gif Op dinsdag 30 oktober 2018 12:18 schreef FlippingCoin het volgende:

[..]

Maar je kan toch abstraheren en uitbreidbaar ontwerpen?

आपला आभारी Flip.
Ik ben ook geen programmeur, kun jij misschien naar mijn edit kijken of daar handiger op lossingen voor zijn....

Ik bedenk me dat ik die constructors voor data met alleen x en y weg zou kunnen laten en dan een null in z gooien maar dat ziet er dan weer lelijk uit als je het aanroept.
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
pi_182833473
quote:
2s.gif Op dinsdag 30 oktober 2018 12:19 schreef Bosbeetle het volgende:

[..]

Ik ben ook geen programmeur, kun jij misschien naar mijn edit kijken of daar handiger op lossingen voor zijn....

Ik bedenk me dat ik die constructors voor data met alleen x en y weg zou kunnen laten en dan een null in z gooien maar dat ziet er dan weer lelijk uit als je het aanroept.
Constructor overloading en dan de constructor met minder argumenten de Z waarden op 0 zetten? Denk dat dat de Java manier is. :P

мэндчилсэн Flip.
I think that it’s extraordinarily important that we in computer science keep fun in computing
For all who deny the struggle, the triumphant overcome
  Moderator dinsdag 30 oktober 2018 @ 12:26:21 #256
27682 crew  Bosbeetle
terminaal verdwaald
pi_182833515
quote:
16s.gif Op dinsdag 30 oktober 2018 12:23 schreef FlippingCoin het volgende:

[..]

Constructor overloading en dan de constructor met minder argumenten de Z waarden op 0 zetten? Denk dat dat de Java manier is. :P

мэндчилсэн Flip.
Ja ik zou liever één constructor hebben en één makedistmat... maar ik zie niet precies in hoe... En ik wil ook weer niet enorm gaan zitten iffen in de makedistmat... die 0 is gewoon een wiskundige truuk eigenlijk omdat je een 2d punt gewoon kun behandelen als een 3d punt met een z van 0.

Maarja dat krijg je als niet programmeurs gaan programmeren.
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
pi_182833547
quote:
2s.gif Op dinsdag 30 oktober 2018 12:26 schreef Bosbeetle het volgende:

[..]

Ja ik zou liever één constructor hebben en één makedistmat... maar ik zie niet precies in hoe... En ik wil ook weer niet enorm gaan zitten iffen in de makedistmat... die 0 is gewoon een wiskundige truuk eigenlijk omdat je een 2d punt gewoon kun behandelen als een 3d punt met een z van 0.
Java is even geleden maar je kan toch vanuit de minst specifieke constructor de specifiekere constructor aanroepen zodat de minst specifieke louter de z waarden op 0 zet en dan de "normale" constructor aanroept?

Saludos cordiales Flip.
I think that it’s extraordinarily important that we in computer science keep fun in computing
For all who deny the struggle, the triumphant overcome
  Moderator dinsdag 30 oktober 2018 @ 12:57:10 #258
27682 crew  Bosbeetle
terminaal verdwaald
pi_182834122
quote:
16s.gif Op dinsdag 30 oktober 2018 12:27 schreef FlippingCoin het volgende:

[..]

Java is even geleden maar je kan toch vanuit de minst specifieke constructor de specifiekere constructor aanroepen zodat de minst specifieke louter de z waarden op 0 zet en dan de "normale" constructor aanroept?

Saludos cordiales Flip.
dat is wel een slimme :) ga ik doen :) Dat doe ik nu in de makedistmat maar dat is logischer in de constructor inderdaad.
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
  Moderator dinsdag 30 oktober 2018 @ 13:03:33 #259
27682 crew  Bosbeetle
terminaal verdwaald
pi_182834221
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package Neigbours;

public class coordinates {

    double[] x,y,z,x2,y2,z2;
    double max;
    double[][] distmat;

    coordinates(double[] x, double[] y){
        
        double[] z_ = new double[x.length];

        for(int i=0;i<z.length;i++){
            z_ = 0;
        }

        this(x,y,z_);
    }

    coordinates(double[] x, double[] y, double[] z){
        this.x = x;
        this.y = y;
        this.z = z;
        MakeDistmat(x,y,z);
    }

    coordinates(double[] x1, double[] y1, double[] x2, double[] y2){
        double[] z_ = new double[x1.length];
        double[] z2_ = new double[x2.length];

        for(int i=0;i<x.length;i++){
            z_ = 0;
        }        

        for(int i=0;i<x2.length;i++){
            z2_ = 0;
        }

        this(x1,y1,z_,x2,y2,z2_);
    }

    coordinates(double[] x1, double[] y1, double[] z1, double[] x2, double[] y2, double[] z2){
        this.x = x1;
        this.y = y1;
        this.z = z1;
        this.x2 = x2;
        this.y2 = y2;
        this.z2 = z2;
        MakeDistmat(x1,y1,z1,x2,y2,z2);
    }

    private void MakeDistmat(double[] x, double[] y, double[] z){

        double[][] dmat = new double[x.length][x.length];

        this.max = 0;

        for(int i=0;i<x.length;i++){
            for(int j=0;j<x.length;j++){
                dmat[i][j] = Math.sqrt( Math.pow(x[i]-x[j],2) + Math.pow(y[i]-y[j],2) + Math.pow(z[i]-z[j],2)  );

                if(dmat[i][j]>max){
                    this.max=dmat[i][j];
                }
            }
        }

        this.distmat = dmat;
    }

    private void MakeDistmat(double[] x1, double[] y1, double[] z1, double[] x2, double[] y2, double[] z2){

        double[][] dmat = new double[x1.length][x2.length];
        this.max = 0;

        for(int i=0;i<x1.length;i++){
            for(int j=0;j<x2.length;j++){
                dmat[i][j] = Math.sqrt( Math.pow(x1[i]-x2[j],2) + Math.pow(y1[i]-y2[j],2) + Math.pow(z1[i]-z2[j],2)  );

                if(dmat[i][j]>max){
                    this.max=dmat[i][j];
                }
            }
        }

        this.distmat = dmat;
    }

}

Dit is al iets schoner :)

[ Bericht 4% gewijzigd door Bosbeetle op 30-10-2018 13:43:02 ]
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
  Moderator dinsdag 30 oktober 2018 @ 13:44:07 #260
27682 crew  Bosbeetle
terminaal verdwaald
pi_182835043
Kak je mag this() alleen aaroepen als eerste ding in een constructor }:| dan wil dit dus niet... Het probleem is ik weet de lengte van z niet.... anders kon ik gewoon een array met 0's klaar hebben staan.
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
  Moderator dinsdag 30 oktober 2018 @ 13:50:41 #261
27682 crew  Bosbeetle
terminaal verdwaald
pi_182835217
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package Neigbours;

public class coordinates {

    double[] x,y,z,x2,y2,z2;
    double max;
    double[][] distmat;

    coordinates(double[] x, double[] y){
       
        this(x,y,null);
    }

    coordinates(double[] x, double[] y, double[] z){
        
        if(z==null){
            
            z = new double[x.length];

            for(int i=0;i<z.length;i++){
                z[i] = 0;
            }

        }
        
        
        this.x = x;
        this.y = y;
        this.z = z;
        MakeDistmat(x,y,z);
    }

    coordinates(double[] x1, double[] y1, double[] x2, double[] y2){
        
        this(x1,y1,null,x2,y2,null);
    }

    coordinates(double[] x1, double[] y1, double[] z1, double[] x2, double[] y2, double[] z2){
        if(z1==null || z2 == null){

            z1 = new double[x1.length];
            z2 = new double[x2.length];
            
            for(int i=0;i<z1.length;i++){
                z1[i] = 0;
            }

            for(int i=0;i<z2.length;i++){
                z2[i] = 0;
            }

        }
        
        this.x = x1;
        this.y = y1;
        this.z = z1;
        this.x2 = x2;
        this.y2 = y2;
        this.z2 = z2;
        MakeDistmat(x1,y1,z1,x2,y2,z2);
    }

    private void MakeDistmat(double[] x, double[] y, double[] z){

        double[][] dmat = new double[x.length][x.length];

        this.max = 0;

        for(int i=0;i<x.length;i++){
            for(int j=0;j<x.length;j++){
                dmat[i][j] = Math.sqrt( Math.pow(x[i]-x[j],2) + Math.pow(y[i]-y[j],2) + Math.pow(z[i]-z[j],2)  );

                if(dmat[i][j]>max){
                    this.max=dmat[i][j];
                }
            }
        }

        this.distmat = dmat;
    }

    private void MakeDistmat(double[] x1, double[] y1, double[] z1, double[] x2, double[] y2, double[] z2){

        double[][] dmat = new double[x1.length][x2.length];
        this.max = 0;

        for(int i=0;i<x1.length;i++){
            for(int j=0;j<x2.length;j++){
                dmat[i][j] = Math.sqrt( Math.pow(x1[i]-x2[j],2) + Math.pow(y1[i]-y2[j],2) + Math.pow(z1[i]-z2[j],2)  );

                if(dmat[i][j]>max){
                    this.max=dmat[i][j];
                }
            }
        }

        this.distmat = dmat;
    }

}

optie drie :P


nogsteeds vier constructors maar dan 2 roepen er 2 aan... ik kan nog naar één functionele constructor die dan door drie anderen wordt aangeroepen...

Maar ik begin me af te vragen of het duidelijker wordt.
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
  Moderator dinsdag 30 oktober 2018 @ 13:58:31 #262
27682 crew  Bosbeetle
terminaal verdwaald
pi_182835418
optie vier:

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package Neigbours;

public class coordinates {

    double[] x,y,z,x2,y2,z2;
    double max;
    double[][] distmat;

    coordinates(double[] x, double[] y){

        this(x,y,null);
    }

    coordinates(double[] x, double[] y, double[] z){

        this(x,y,z,null,null,null);
    }

    coordinates(double[] x1, double[] y1, double[] x2, double[] y2){

        this(x1,y1,null,x2,y2,null);
    }

    coordinates(double[] x1, double[] y1, double[] z1, double[] x2, double[] y2, double[] z2){
        
        
        if(z1==null){
            z1 = new double[x1.length];
            
            for(int i=0;i<z1.length;i++){
                z1[i] = 0;
            }
        }

        if(z2==null && x2 != null){
            z2 = new double[x2.length];

            for(int i=0;i<z2.length;i++){
                z2[i] = 0;
            }
        }       

        this.x = x1;
        this.y = y1;
        this.z = z1;
        
        
        if(x2==null) {
            MakeDistmat(x1, y1, z1);
        }else{
            this.x2 = x2;
            this.y2 = y2;
            this.z2 = z2;
            MakeDistmat(x1, y1, z1, x2, y2, z2);
        }
    }

    private void MakeDistmat(double[] x, double[] y, double[] z){

        double[][] dmat = new double[x.length][x.length];

        this.max = 0;

        for(int i=0;i<x.length;i++){
            for(int j=0;j<x.length;j++){
                dmat[i][j] = Math.sqrt( Math.pow(x[i]-x[j],2) + Math.pow(y[i]-y[j],2) + Math.pow(z[i]-z[j],2)  );

                if(dmat[i][j]>max){
                    this.max=dmat[i][j];
                }
            }
        }

        this.distmat = dmat;
    }

    private void MakeDistmat(double[] x1, double[] y1, double[] z1, double[] x2, double[] y2, double[] z2){

        double[][] dmat = new double[x1.length][x2.length];
        this.max = 0;

        for(int i=0;i<x1.length;i++){
            for(int j=0;j<x2.length;j++){
                dmat[i][j] = Math.sqrt( Math.pow(x1[i]-x2[j],2) + Math.pow(y1[i]-y2[j],2) + Math.pow(z1[i]-z2[j],2)  );

                if(dmat[i][j]>max){
                    this.max=dmat[i][j];
                }
            }
        }

        this.distmat = dmat;
    }

}

hehe sorry voor de spam, nu de vraag welke zouden jullie gebruiken?
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
pi_182836796
Kijk er vanavond even naar Bos, op mobiel beetje vervelend. :P

Su pagarba Flip.
I think that it’s extraordinarily important that we in computer science keep fun in computing
For all who deny the struggle, the triumphant overcome
  dinsdag 30 oktober 2018 @ 19:20:55 #264
85514 ralfie
!Yvan eht nioj
pi_182842662
quote:
2s.gif Op dinsdag 30 oktober 2018 13:58 schreef Bosbeetle het volgende:
optie vier:
[ code verwijderd ]

hehe sorry voor de spam, nu de vraag welke zouden jullie gebruiken?
Ik moet moeite doen om je code te volgen, en dat is iha een teken dat je code te chaotisch is.

Code die specifiek is voor het aantal meegegeven argumenten aan een constructor zet je in de specifieke constructor, de rest prop je in een initialize methode. Dat this() is zoo lelijk, maar goed, ik heb een java-allergie :) Het gevaar zie je in je code. Als je de eerste constructor gebruikt (ctor(double[], double[])), moet je vier(!) constructors doorploegen voordat je weet wat je code doet...
  Moderator dinsdag 30 oktober 2018 @ 19:25:25 #265
27682 crew  Bosbeetle
terminaal verdwaald
pi_182842792
quote:
0s.gif Op dinsdag 30 oktober 2018 19:20 schreef ralfie het volgende:

[..]

Ik moet moeite doen om je code te volgen, en dat is iha een teken dat je code te chaotisch is.

Code die specifiek is voor het aantal meegegeven argumenten aan een constructor zet je in de specifieke constructor, de rest prop je in een initialize methode. Dat this() is zoo lelijk, maar goed, ik heb een java-allergie :) Het gevaar zie je in je code. Als je de eerste constructor gebruikt (ctor(double[], double[])), moet je vier(!) constructors doorploegen voordat je weet wat je code doet...
Ja dat versie 1 dus niet maar daar zit dan weer heel veel duplicatie in.

Is er een elegantere oplossing hiervoor?

Hoe zou je het bijvoorbeeld doen zonder die methode? Elke constructor zelf een matrix laten berekenen?

Zoals ik zeg ik heb nooit leren programmeren ik doe maar wat :D
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
  dinsdag 30 oktober 2018 @ 20:43:25 #266
85514 ralfie
!Yvan eht nioj
pi_182844790
quote:
1s.gif Op dinsdag 30 oktober 2018 19:25 schreef Bosbeetle het volgende:

[..]

Ja dat versie 1 dus niet maar daar zit dan weer heel veel duplicatie in.

Is er een elegantere oplossing hiervoor?

Hoe zou je het bijvoorbeeld doen zonder die methode? Elke constructor zelf een matrix laten berekenen?

Zoals ik zeg ik heb nooit leren programmeren ik doe maar wat :D
Tuurlijk heb je leren programmeren anders had je dit niet al gehad :) Ik ben zelf nu fullstack developer maar heb ook maar medische wetenschappen gestudeerd. De rest is hobby -->> werk

Om met het meest obvious antwoord te komen: je bent bezig met vectoren en daar zijn in Java standaard classes voor: Vector2D en Vector3D in java. (even snel gegoogled: https://docs.oracle.com/c(...)ecmath/Vector2d.html, geen idee of het wat is, heb nog nooit iets in Java gedaan). De standaard classes hebben standaard properties zoals length, wat feitelijk is wat je berekend. In jouw geval zou je twee arrays van vectoren doorlopen om de max length van elk item te bepalen.

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
class DistanceMatrix2D
{
  double[,] distances;
  double maxLength = 0;

  constructor(Vector2D[] points)
  {
    //OF this(points, points)
    distances= new double[points.length, points.length];
    for(int x=0;x<points.length;x++)
    {
        for(int y=0;y<points.length;y++)
        {
            this.distances[x,y] = (points[x] - points[y]).length();
            this.maxLength = Math.max(this.distances[x,y], this.maxLength);
        }
    }
  }
  constructor(Vector2D[] points1, Vector2D[] points 2)
  {
    distances= new double[points1.length, points2.length];

    for(int x=0;x<points1.length;x++)
    {
        for(int y=0;y<points2.length;y++)
        {
            this.distances[x,y] = (points1[x] - points2[y]).length();
            this.maxLength = Math.max(this.distances[x,y], this.maxLength);
        }
    }
  }
}
class DistanceMatrix3D
{
  double[,] distances;
  double maxLength = 0;

  constructor(Vector3D[] points)
  {
    //OF this(points, points)
    this.distances= new double[points.length, points.length];
    for(int x=0;x<points.length;x++)
    {
        for(int y=0;y<points.length;y++)
        {
            this.distances[x,y] = (points[x] - points[y]).length();
            this.maxLength = Math.max(this.distances[x,y], this.maxLength);
        }
    }
  }
  constructor(Vector3D[] points1, Vector2D[] points 2)
  {
    this.distances= new double[points1.length, points2.length];

    for(int x=0;x<points1.length;x++)
    {
        for(int y=0;y<points2.length;y++)
        {
            this.distances[x,y] = (points1[x] - points2[y]).length();
            this.maxLength = Math.max(this.distances[x,y], this.maxLength);
        }
    }
  }
}
(code geschreven in fok! 'IDE' en met 0 ervaring in Java, dus mogelijk vol met fouten (en ook mogelijk niet wat je bedoeling was). Maar je snapt het idee neem ik aan?

De code laat ook goed zien dat jouw code feitelijk uit twee distincte scenarios bestaat: 2d en 3d, met daarbinnen de mogelijkheid een array met zichzelf of met een andere array te vergelijken. Vandaar dat ik dit in twee classes zou doen. Leest net wat makkelijker.

Mocht je geen zin hebben in vectoren blijft de code qua structuur hetzelfde, alleen zit er iets meer wiskunde in sommige regels.
  Moderator dinsdag 30 oktober 2018 @ 23:16:41 #267
27682 crew  Bosbeetle
terminaal verdwaald
pi_182848066
quote:
0s.gif Op dinsdag 30 oktober 2018 20:43 schreef ralfie het volgende:

[..]

Tuurlijk heb je leren programmeren anders had je dit niet al gehad :) Ik ben zelf nu fullstack developer maar heb ook maar medische wetenschappen gestudeerd. De rest is hobby -->> werk

Om met het meest obvious antwoord te komen: je bent bezig met vectoren en daar zijn in Java standaard classes voor: Vector2D en Vector3D in java. (even snel gegoogled: https://docs.oracle.com/c(...)ecmath/Vector2d.html, geen idee of het wat is, heb nog nooit iets in Java gedaan). De standaard classes hebben standaard properties zoals length, wat feitelijk is wat je berekend. In jouw geval zou je twee arrays van vectoren doorlopen om de max length van elk item te bepalen.
[ code verwijderd ]

(code geschreven in fok! 'IDE' en met 0 ervaring in Java, dus mogelijk vol met fouten (en ook mogelijk niet wat je bedoeling was). Maar je snapt het idee neem ik aan?

De code laat ook goed zien dat jouw code feitelijk uit twee distincte scenarios bestaat: 2d en 3d, met daarbinnen de mogelijkheid een array met zichzelf of met een andere array te vergelijken. Vandaar dat ik dit in twee classes zou doen. Leest net wat makkelijker.

Mocht je geen zin hebben in vectoren blijft de code qua structuur hetzelfde, alleen zit er iets meer wiskunde in sommige regels.
Ah okay dit snap ik maar als wetenschapper heb ik liever toegang tot mijn eigen methodes :P een cartesian coordinaten paar behandelen als een vector zou ik niet doen, dan val te snel in valkuilen als length zien als een afstand terwijl dat in deze de lengte van de vector is wat voor coördinaten niet echt iets betekend. Een extra klasse maken voor 3d ten opzichte van 2D zorgt dat ik in de bovenliggende code veel meer moet gaan testen en aanroepen.

Wel tof om code van iemand anders te zien, ga wel een keer puzzelen om dit beter te krijgen.
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
  Moderator dinsdag 30 oktober 2018 @ 23:22:41 #268
27682 crew  Bosbeetle
terminaal verdwaald
pi_182848136
Ik heb helaas wel geleerd om zo min mogelijk van externe pakketen of functies afhankelijk te zijn omdat ze die nog wel eens willen veranderen.

:X hoevaak ik wel niet normalisatie functies heb gezien die echt rare dingen met je data doen, terwijl zo makkelijk zelf te schrijven zijn.... :X
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
  Moderator woensdag 31 oktober 2018 @ 06:53:31 #269
27682 crew  Bosbeetle
terminaal verdwaald
pi_182850444
Opzich zou het misschien nog wel wat zijn om hier een klasse van te maken met twee subklassen voor 2 of 3D zodat ik bovenliggend met de super kan werken... Dat ga ik vandaag eens in elkaar zetten...
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
  Moderator woensdag 31 oktober 2018 @ 09:13:19 #270
27682 crew  Bosbeetle
terminaal verdwaald
pi_182851394
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package Neigbours;

public class coordinates {

    double[] x,y,x2,y2;
    double max;
    double[][] distmat;

    coordinates(double[] x, double[] y){

        this.x = x;
        this.y = y;

        MakeDistmat(x,y,x,y);

    }

    coordinates(double[] x1, double[] y1,double[] x1, double[] y1){

        this.x = x1;
        this.y = y1;
        this.x2 = x2;
        this.y2 = y2;

        MakeDistmat(x1,y1,x2,y2);

    }


    private void MakeDistmat(double[] x1, double[] y1, double[] x2, double[] y2){

        double[][] dmat = new double[x1.length][x2.length];
        this.max = 0;

        for(int i=0;i<x1.length;i++){
            for(int j=0;j<x2.length;j++){
                dmat[i][j] = Math.sqrt( Math.pow(x1[i]-x2[j],2) + Math.pow(y1[i]-y2[j],2) );

                this.max = Math.max(dmat[i][j],this.max);
            }
        }

        this.distmat = dmat;
    }

}

public class coordinates3D extends coordinates {

    double[] z,z2;

    coordinates3D(double[] x, double[] y, double[] z){

        super(x,y);
        this.z = z;
        addZdist(z,z);


    }

    coordinates3D(double[] x1, double[] y1,double[] z1, double[] x2, double[] y2, double[] z2){

        super(x1,y1,x2,y2);
        this.z = z1;
        this.z2 = z2;
        addZdist(z1,z2);

    }

    private void addZdist(double[] z1, double[] z2 ){

        super.max=0;

        for(int i=0;i<super.distmat.length;i++){
            for(int j=0;j<super.distmat[0].length;j++){
                super.distmat[i][j] = Math.sqrt( Math.pow(super.distmat[i][j],2) + Math.pow(z1[i]-z2[j],2) );
                super.max = Math.max(super.distmat[i][j],super.max);
            }
        }
    }

}

zo dan 2 klasses 1 voor 2D en een extend naar 3D, de construct method voor de matrix gereduceerd naar 1 method per klasse... en dus geen gedoe meer met de z naar 0 zetten...

Het enige wat ik me nu afvraag of ik bij de x en y cooordinaten kan vanuit de coordinates3D via this.x of this.y of dat ik daar nu getters voor moet schrijven die super.x kunnen returnen?
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
pi_182854716
quote:
1s.gif Op dinsdag 30 oktober 2018 23:22 schreef Bosbeetle het volgende:
Ik heb helaas wel geleerd om zo min mogelijk van externe pakketen of functies afhankelijk te zijn omdat ze die nog wel eens willen veranderen.

:X hoevaak ik wel niet normalisatie functies heb gezien die echt rare dingen met je data doen, terwijl zo makkelijk zelf te schrijven zijn.... :X
De gebruikte versie van je library kan je vastzetten, vrijwel alle grote systemen gebruiken libraries.

Ezgu tilaklar ila Flip.
I think that it’s extraordinarily important that we in computer science keep fun in computing
For all who deny the struggle, the triumphant overcome
pi_182854781
quote:
2s.gif Op woensdag 31 oktober 2018 09:13 schreef Bosbeetle het volgende:

[ code verwijderd ]

zo dan 2 klasses 1 voor 2D en een extend naar 3D, de construct method voor de matrix gereduceerd naar 1 method per klasse... en dus geen gedoe meer met de z naar 0 zetten...

Het enige wat ik me nu afvraag of ik bij de x en y cooordinaten kan vanuit de coordinates3D via this.x of this.y of dat ik daar nu getters voor moet schrijven die super.x kunnen returnen?

Als je een attribuut of methode protected maak dan kan je erbij vanuit het package en subclasses, by default zijn attributen in java private dacht ik.

Ar cieņu Flip.
I think that it’s extraordinarily important that we in computer science keep fun in computing
For all who deny the struggle, the triumphant overcome
  Moderator woensdag 31 oktober 2018 @ 13:03:48 #273
27682 crew  Bosbeetle
terminaal verdwaald
pi_182855023
quote:
16s.gif Op woensdag 31 oktober 2018 12:45 schreef FlippingCoin het volgende:

[..]

De gebruikte versie van je library kan je vastzetten, vrijwel alle grote systemen gebruiken libraries.

Ezgu tilaklar ila Flip.
Snap ik ik werk nu met imagej dus ik zit ook al aan een api/library vast :P
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
  Moderator woensdag 31 oktober 2018 @ 13:08:07 #274
27682 crew  Bosbeetle
terminaal verdwaald
pi_182855113
quote:
16s.gif Op woensdag 31 oktober 2018 12:49 schreef FlippingCoin het volgende:

[..]

Als je een attribuut of methode protected maak dan kan je erbij vanuit het package en subclasses, by default zijn attributen in java private dacht ik.

Ar cieņu Flip.
Iets duidelijker gezegd ik heb dus class1 met x en y, en die wordt geextend naar class2 met een z.
Als ik dan class1 object = new class2(); doe kan ik dan vervolgens object.x doen (ik denk het wel) en ook object.z m.a.w. heeft het object de fields van zowel zijn eigen klasse als zijn superklasse.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class1{
int a = 6;
    class1(){
    }

}

class2 extends class1{
   int b = 7;
   class2(){
       super(); //niet nodig persee
   }
}

en dan ergens de code

class1 obj = new class2();
system.out.println("a: "+obj.a);
system.out.println("b: "+obj.b);

werkt dat?
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
pi_182855307
quote:
2s.gif Op woensdag 31 oktober 2018 13:08 schreef Bosbeetle het volgende:

[..]

Iets duidelijker gezegd ik heb dus class1 met x en y, en die wordt geextend naar class2 met een z.
Als ik dan class1 object = new class2(); doe kan ik dan vervolgens object.x doen (ik denk het wel) en ook object.z m.a.w. heeft het object de fields van zowel zijn eigen klasse als zijn superklasse.
[ code verwijderd ]

werkt dat?
Zoals in jouw voorbeeld, zou je attribuut a moeten opnemen als:
1protected int a = 6;

En vanwege polymorfisme zou je daarna je object naar class2 moeten casten om attribuut b uit te kunnen printen. Dus als je attribuut a protected maakt kan je dit attribuut in class2 gebruiken.

Niet zoals in je print lines omdat je daar private attributen benaderd vanbuiten de class en dat kan niet.

أطيب التحيات Flip.
I think that it’s extraordinarily important that we in computer science keep fun in computing
For all who deny the struggle, the triumphant overcome
  Moderator woensdag 31 oktober 2018 @ 13:20:06 #276
27682 crew  Bosbeetle
terminaal verdwaald
pi_182855347
quote:
16s.gif Op woensdag 31 oktober 2018 13:17 schreef FlippingCoin het volgende:

[..]

Zoals in jouw voorbeeld, zou je attribuut a moeten opnemen als:
[ code verwijderd ]

En vanwege polymorfisme zou je daarna je object naar class2 moeten casten om attribuut b uit te kunnen printen. Dus als je attribuut a protected maakt kan je dit attribuut in class2 gebruiken.

Niet zoals in je print lines omdat je daar private attributen benaderd vanbuiten de class en dat kan niet.

أطيب التحيات Flip.
Jup net getest en dat kan, of public... maar protected is beter.
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
pi_182855389
quote:
2s.gif Op woensdag 31 oktober 2018 13:20 schreef Bosbeetle het volgende:

[..]

Jup net getest en dat kan, of public... maar protected is beter.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class1 {
    protected int a = 6;
    public printA() {
        system.out.println(this.a);
    }
}

class2 {
    int b = 3;
    public printAB() {
        system.out.println(this.a, this.b);
    }
}
class1 obj = new class2();
obj.printA();
(class2) obj.printAB();

zo ongeveer, hoop ik, java is even geleden. :@

Հարգանքներով Flip.
I think that it’s extraordinarily important that we in computer science keep fun in computing
For all who deny the struggle, the triumphant overcome
  Moderator woensdag 31 oktober 2018 @ 13:45:45 #278
27682 crew  Bosbeetle
terminaal verdwaald
pi_182855876
quote:
16s.gif Op woensdag 31 oktober 2018 13:21 schreef FlippingCoin het volgende:

[..]
[ code verwijderd ]

zo ongeveer, hoop ik, java is even geleden. :@

Հարգանքներով Flip.
ja iets dergelijks werkt wel... :P Ben vooral blij dat ik nu van al die duplicatie af ben, nu kan ik één ding aanpassen en hoef ik niet alles bij langs :)

Ik leer het wel ooit....
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
pi_182856777
quote:
14s.gif Op woensdag 31 oktober 2018 13:45 schreef Bosbeetle het volgende:

[..]

ja iets dergelijks werkt wel... :P Ben vooral blij dat ik nu van al die duplicatie af ben, nu kan ik één ding aanpassen en hoef ik niet alles bij langs :)

Ik leer het wel ooit....
Ja het tegengaan van redundancy is sowieso een hoeksteen van betere code, dat en leesbaarheid. :P

S přátelským pozdravem Flip.
I think that it’s extraordinarily important that we in computer science keep fun in computing
For all who deny the struggle, the triumphant overcome
pi_182877095
Ben nu bezig met een tweede boek met een iets andere benadering. In het hoofdstuk waar ik nu zit, kwam ik de volgende vragen tegen:

What are the fundamental things you need to think about when you design a Java class?

What are the questions you need to ask yourself?

If you could design a checklist to use when you're designing a class, what would be on the checklist?

Maar er wordt niet echt ingegaan op het beantwoorden hiervan. Aangezien ik het wel interessante vragen vind, wat zouden jullie antwoorden?

ps nee, nog steeds geen huiswerk
ウプピエ 八十三 &lt;&lt; u-pu-pi-e hachi-ju-san, ik denk ik zeg het er maar ff bij :P
pi_182877162
quote:
0s.gif Op donderdag 1 november 2018 14:11 schreef uppie83 het volgende:
Ben nu bezig met een tweede boek met een iets andere benadering. In het hoofdstuk waar ik nu zit, kwam ik de volgende vragen tegen:

What are the fundamental things you need to think about when you design a Java class?

What are the questions you need to ask yourself?

If you could design a checklist to use when you're designing a class, what would be on the checklist?

Maar er wordt niet echt ingegaan op het beantwoorden hiervan. Aangezien ik het wel interessante vragen vind, wat zouden jullie antwoorden?

ps nee, nog steeds geen huiswerk
SOLID principles. :)
I think that it’s extraordinarily important that we in computer science keep fun in computing
For all who deny the struggle, the triumphant overcome
  Moderator donderdag 1 november 2018 @ 14:53:20 #282
27682 crew  Bosbeetle
terminaal verdwaald
pi_182878011
Ik zie een programma nog veel te veel als een soort parametrische/procedurele benadering van wiskunde.

Simpelweg is voor mij een programma altijd het volgende data -> wiskundige bewerking in korte stappen -> resultaten. Daarom moet voor mij een klasse vaak één van de volgende dingen, iets zeggen over data, een bewerking doen op data, het beter hanteerbaar maken van data.... En ik ben er nog niet over uit of ik binnen een klasse veel methodes maak die dingen met data doen en de data erin hang of dat ik een losse klasse maak voor de data zelf.

Maar ik programmeer vaak met beelden dus de data is meestal vier dimensionaal en gequantificeerd in voxels, dus dat is ietsje lastiger dan linieare data...

Het probleem waar ik wel tegenaan loop is dat ik eigenlijk nooit iets maak wat gewoon iets moet kunnen maar dat ik de code ook altijd exploratief gebruik. Ik werk echt zelden met statische gegevens die telkens hetzelfde zijn, en merk ook dat mijn toolbox daarvoor minder goed gevuld is.
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
pi_182879233
quote:
2s.gif Op donderdag 1 november 2018 14:53 schreef Bosbeetle het volgende:
Ik zie een programma nog veel te veel als een soort parametrische/procedurele benadering van wiskunde.

Simpelweg is voor mij een programma altijd het volgende data -> wiskundige bewerking in korte stappen -> resultaten. Daarom moet voor mij een klasse vaak één van de volgende dingen, iets zeggen over data, een bewerking doen op data, het beter hanteerbaar maken van data.... En ik ben er nog niet over uit of ik binnen een klasse veel methodes maak die dingen met data doen en de data erin hang of dat ik een losse klasse maak voor de data zelf.

Maar ik programmeer vaak met beelden dus de data is meestal vier dimensionaal en gequantificeerd in voxels, dus dat is ietsje lastiger dan linieare data...

Het probleem waar ik wel tegenaan loop is dat ik eigenlijk nooit iets maak wat gewoon iets moet kunnen maar dat ik de code ook altijd exploratief gebruik. Ik werk echt zelden met statische gegevens die telkens hetzelfde zijn, en merk ook dat mijn toolbox daarvoor minder goed gevuld is.
Lijkt erop als java niet dé taal is voor jou, kijk eens naar het functionele paradigma.

Daarmee laat je als het ware een bak data door een set functies stromen, en dan kan je die set functies veranderen voor andere resultaten.
I think that it’s extraordinarily important that we in computer science keep fun in computing
For all who deny the struggle, the triumphant overcome
  Moderator donderdag 1 november 2018 @ 15:43:30 #284
27682 crew  Bosbeetle
terminaal verdwaald
pi_182879265
quote:
1s.gif Op donderdag 1 november 2018 15:42 schreef FlippingCoin het volgende:

[..]

Lijkt erop als java niet dé taal is voor jou, kijk eens naar het functionele paradigma.
Ik gebruik ook voornamelijk R wat functioneel is.
Java gebruik ik omdat ik dank kan werken met het programma imagej/fiji en voor de snelheid. Ook schrijf ik veel macros in imagej maar die zijn dan weer sloom.
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
pi_182879333
quote:
2s.gif Op donderdag 1 november 2018 15:43 schreef Bosbeetle het volgende:

[..]

Ik gebruik ook voornamelijk R wat functioneel is.
Java gebruik ik omdat ik dank kan werken met het programma imagej/fiji en voor de snelheid. Ook schrijf ik veel macros in imagej maar die zijn dan weer sloom.
Ah ja R is een stuk beter daarvoor ja.
I think that it’s extraordinarily important that we in computer science keep fun in computing
For all who deny the struggle, the triumphant overcome
  Moderator donderdag 1 november 2018 @ 15:49:02 #286
27682 crew  Bosbeetle
terminaal verdwaald
pi_182879430
quote:
1s.gif Op donderdag 1 november 2018 15:45 schreef FlippingCoin het volgende:

[..]

Ah ja R is een stuk beter daarvoor ja.
maar R is weer een stuk slechter in beelden... en soms plak ik toch weer c++ in r dmv rccp :P

Achja zo heeft alles wat :P

Ik hou er wel van om zo te werken gewoon doelgericht iets voor elkaar zien te krijgen... als het werkt dan werkt het. :D

Ik zou wel graag wat beter fourier transformaties onder de knie hebben, ik weet wat het is en hoe het werkt maar op de fijne details gaat het mis. Daar kun je zoveel leuke image of muziek dingen mee doen als je het goed begrijpt....


Vandaag nog overleg gehad met een klininsch lab waar ze macro's van mij gebruiken. Het is soms wel grappig om te zien hoe mensen reageren als je alleen maar een programmatje structuurtjes laat tellen... ze kijken je soms echt aan alsof je magie doet :P Ikzelf heb een bloedhekel aan telkens hetzelfde doen dus als ik drie keer achter elkaar hetzelfde riedeltje moet doorlopen dan schrijf ik daar wel iets voor, dit zijn mensen die al jaren lang honderden structuurtjes met de hand tellen :o :X (als ik daar gewerkt had had ik dat al veel eerder anders aangepakt)
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
  donderdag 1 november 2018 @ 18:56:58 #287
85514 ralfie
!Yvan eht nioj
pi_182883464
quote:
2s.gif Op donderdag 1 november 2018 15:43 schreef Bosbeetle het volgende:

[..]

Ik gebruik ook voornamelijk R wat functioneel is.
Java gebruik ik omdat ik dank kan werken met het programma imagej/fiji en voor de snelheid. Ook schrijf ik veel macros in imagej maar die zijn dan weer sloom.
R functioneel? Procedureel, zeker. object-oriented: ook wel, maar functioneel?

Als je R-achtige bewerkingen met images wil doen kun je het beste beginnen met Python. Praktisch alle zelf-geschreven code in het academisch onderzoek betreffende images wordt in Python gedaan met uitstapjes naar C/C++ als het meer performant moet zijn.
  Moderator donderdag 1 november 2018 @ 18:59:30 #288
27682 crew  Bosbeetle
terminaal verdwaald
pi_182883536
quote:
0s.gif Op donderdag 1 november 2018 18:56 schreef ralfie het volgende:

[..]

R functioneel? Procedureel, zeker. object-oriented: ook wel, maar functioneel?

Als je R-achtige bewerkingen met images wil doen kun je het beste beginnen met Python. Praktisch alle zelf-geschreven code in het academisch onderzoek betreffende images wordt in Python gedaan met uitstapjes naar C/C++ als het meer performant moet zijn.
Dan onderschat je de imagej/cellprofiler community bijna alle microscopie analyse loopt daarop (en dus op Java) en als goede tweede matlab voor de wat meer natuurkundigen.
Er zijn ook wel wat python pakketten maar voor microscopie zit de de cutting edge op matlab.

Ik heb trouwens een verkeerd beeld van functionele talen wat is wel een functionele taal? LISP?
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
  Moderator donderdag 1 november 2018 @ 19:04:04 #289
27682 crew  Bosbeetle
terminaal verdwaald
pi_182883623
quote:
0s.gif Op donderdag 1 november 2018 18:56 schreef ralfie het volgende:

[..]

R functioneel? Procedureel, zeker. object-oriented: ook wel, maar functioneel?

Als je R-achtige bewerkingen met images wil doen kun je het beste beginnen met Python. Praktisch alle zelf-geschreven code in het academisch onderzoek betreffende images wordt in Python gedaan met uitstapjes naar C/C++ als het meer performant moet zijn.
Wat vind je trouwens van mijn laatste versie van dat stukje code?
En mochten we vallen dan is het omhoog. - Krang (uit: Pantani)
My favourite music is the music I haven't yet heard - John Cage
Water: ijskoud de hardste - Gehenna
  donderdag 1 november 2018 @ 19:07:00 #290
85514 ralfie
!Yvan eht nioj
pi_182883688
quote:
1s.gif Op donderdag 1 november 2018 18:59 schreef Bosbeetle het volgende:

[..]

Dan onderschat je de imagej/cellprofiler community bijna alle microscopie analyse loopt daarop (en dus op Java) en als goede tweede matlab voor de wat meer natuurkundigen.

Ik heb trouwens een verkeerd beeld van functionele talen wat is wel een functionele taal? LISP?
Sorry, had moeten zeggen medische (radiology) images. Je hebt helemaal gelijk dat microscopie-achtige bewerkingen vaak met java gedaan worden (volgens mij volledig vanwege imagej :) ) en inderdaad matlab was ik even vergeten.

Het verschil tussen functioneel en procedureel is lastig uit te leggen zonder een zooi voorbeelden, dus laat ik dat mooi aan wikipedia over: https://en.wikipedia.org/wiki/Functional_programming

Lisp is idd een voorbeeld, hoewel ik zelf alleen F# en Haskell ken (maar zeer zelden gebruik).
  donderdag 1 november 2018 @ 19:13:08 #291
85514 ralfie
!Yvan eht nioj
pi_182883807
quote:
1s.gif Op donderdag 1 november 2018 19:04 schreef Bosbeetle het volgende:

[..]

Wat vind je trouwens van mijn laatste versie van dat stukje code?
Een stuk duidelijker (zul je zelf ook wel gemerkt hebben?) hoewel ik persoonlijk toch eerder vector2d/vector3d zou gebruiken. Dat is geen exotische code :) vectoren vormen de basis voor alle 2d en 3d coordinate berekeningen in elke programmeer taal, en werken goed samen met matrixvermenigvuldigingen, opengl/directx etc. Wat je doet is niet verkeerd, maar werkt fouten in de hand wanneer je dingen zelf gaat schrijven die al bestaan.
pi_182924581
Hmm de volgende Java code gaat compleet fout (4 foutmeldingen met compilen).... maar waarom :?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class booleanTest{
  public static void main(String[] args){
    int x = 2;

    public boolean method(){
      if(x==3){
        return true;
      }
      return false;
    }

    System.out.print(method());
  }
}
ウプピエ 八十三 &lt;&lt; u-pu-pi-e hachi-ju-san, ik denk ik zeg het er maar ff bij :P
  zaterdag 3 november 2018 @ 20:58:17 #293
463823 Rodgrod
Lekker met vanillekwark
pi_182924751
quote:
0s.gif Op zaterdag 3 november 2018 20:48 schreef uppie83 het volgende:
Hmm de volgende Java code gaat compleet fout (4 foutmeldingen met compilen).... maar waarom :?
[ code verwijderd ]

Omdat je een methode definieert in je main methode. Zet hem er buiten en hij werkt, mits het een static methode is.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Main {

    public static void main(String[] args){
        int x = 2;
        System.out.print(method(2));
    }

    public static boolean method(int x){
        if(x==3){
            return true;
        }
        return false;
    }
}
❤️🐤🐤🐤🐤🐤🐤🐤🐤❤️
Doet rubber om staven
pi_182925188
quote:
12s.gif Op zaterdag 3 november 2018 20:58 schreef Rodgrod het volgende:

[..]

Omdat je een methode definieert in je main methode. Zet hem er buiten en hij werkt, mits het een static methode is.
[ code verwijderd ]

oh zo simpel... ok :)
ウプピエ 八十三 &lt;&lt; u-pu-pi-e hachi-ju-san, ik denk ik zeg het er maar ff bij :P
pi_182925238
quote:
0s.gif Op zaterdag 3 november 2018 20:48 schreef uppie83 het volgende:
Hmm de volgende Java code gaat compleet fout (4 foutmeldingen met compilen).... maar waarom :?
[ code verwijderd ]

Dat herinner ik mij ook nog wel. :@

Mit freundlichen Grüßen Flip.
I think that it’s extraordinarily important that we in computer science keep fun in computing
For all who deny the struggle, the triumphant overcome
pi_182935127
ZOooooo, eindelijk mijn eerste 'echte' oefening... het befaamde Tic Tac Toe. Om een beetje te oefenen met het framewerk van de toekomst wilde ik het in JavaFX maken. Het laatste hoofdstuk van het boek ging hier over, al was het niet zo uitgebreid. Tot nu toe heb ik alle compile errors en runtime exceptions volgens mij verholpen. Bij het opstarten blijft het geheel echter hangen. Wie kan mij verder helpen? Aub rekening houdend dat ik net begonnen ben met Java O-)

ps. Ja ik heb heel veel op internet gekeken, maar iedereen heeft een andere benadering, waardoor de code dusdanig anders is dat ik het dan compleet moet kopieren om er wat mee te kunnen.

ps 2. toch wel trots op mijzelf dat ik al zover kom zonder ook maar iets af te kijken :Y

cell
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
import javafx.scene.control.Button;

public class cell extends Button{
  //int length;                //length of all sides
  String state;              // X, O, or unset ""
  
  //constructor
  public cell(String s){
    state = s;
    //standard length
    //length = 100;
  }

  public boolean isSet(){
    if(!state.equals("")){
      return true;
    }
    return false;
  }

  public void setState(String x){
    state = x;
  }

  public String getState(){
    return state;
  }
}

board
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
public class board{
  public cell[][] board;

  //constructor
  public board(){
    board = new cell[3][3];
    for(int x = 0; x<3; x++){
      for(int y = 0; y<3; y++){
        //creates 9 cells with empty states
        board[x][y]= new cell("");
      }
    }
  }

  // checks if cells at row Y have the same state
  boolean checkRow(int y){
    //isSet check for all cells
    for(int x = 0; x<3; x++){
      if(!board[x][y].isSet()){
        return false;
      }
    }
    //if all cells are set, check for win-condition
    if(  board[0][y].getState().equals( board[1][y].getState() ) && board[1][y].getState().equals(board[2][y].getState())    ){
      return true;
    }
    return false;
  }

  // checks if cells at column X have the same state
  boolean checkColumn(int x){
    //isSet check for all cells
    for(int y = 0; y<3; y++){
      if(!board[x][y].isSet()){
        return false;
      }
    }
    //if all cells are set, check for win-condition
    if(  board[x][0].getState().equals( board[x][1].getState() ) && board[x][1].getState().equals(board[x][2].getState())    ){
      return true;
    }
    return false;
  }

  boolean checkDiagonals(){
    boolean check1 = true;
    boolean check2 = true;
    // diagonal 1 (top left, bottom right) isSet check
    for(int i = 0; i<3; i++){
      if(!board[i][i].isSet()){
        check1 = false;
      }
    }
    //if all cells are set, check for win-condition
    if(check1){
      if( board[0][0].getState().equals( board[1][1].getState() ) && board[1][1].getState().equals(board[2][2].getState())    ){
        return check1;
      }
    }
    // diagonal 2 (bottom left, top right) isSet check (only if diagonal 1 didn't have the win-condition
    for(int i = 0; i<3; i++){
      for(int j = 2; j>=0; j--){
        if(!board[i][j].isSet()){
          check2 = false;
        }
      }
    }
    //if all cells are set, check for win-condition
    if(check2){
      if( board[0][2].getState().equals( board[1][1].getState() ) && board[1][1].getState().equals(board[2][0].getState())    ){
        return check2;
      }
    }
    // no diagonal had a win-condition
    return false;
  }

  public boolean checkBoard(){
    if(checkRow(0) || checkRow(1) || checkRow(2) || checkColumn(0) || checkColumn(1) || checkColumn(2) || checkDiagonals()){
      return true;
    }
    return false;
  }
}

player
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class player{
 int number;
 String userSymbol;
 
 public player(String u){
   userSymbol = u;
 }

 public void setNumber(int n){
   number = n;
 }
 public int getNumber(){
   return number;
 }
 public void setUserSymbol(String s){
   userSymbol = s;
 }
 public String getUserSymbol(){
   return userSymbol;
 }
}

game
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/* My own Tic-Tac-Toe game.
 */
 
import javafx.application.*;
import javafx.scene.*;
import javafx.stage.*;
import javafx.scene.layout.*;
import javafx.scene.control.*;
import javafx.event.*;
import javafx.geometry.*;

public class game extends Application{

  
  public static void main(String[] args){

    //start the JavaFX application by calling launch()
    launch(args);
  }
  
  // override the start() method
  public void start(Stage myStage){
    board gameBoard = new board();
    player player1 = new player("X");
    player player2 = new player("O");
    player currentPlayer;
    boolean isPlayer1 = true;
    boolean finished = false;
    
    if(isPlayer1){
      currentPlayer = player1;
    }
    else{
      currentPlayer = player2;
    }
    
    // give the stage a title
    myStage.setTitle("Tic-Tac-Toe");
    // use a flowpane for the root node. In this case,
    // vertical and horizontal gaps of 10
    GridPane rootNode = new GridPane();

    // center the controls in the scene
    rootNode.setAlignment(Pos.CENTER);
    // create a scene
    Scene myScene = new Scene(rootNode, 340, 340);
    // set the scene on the stage
    myStage.setScene(myScene);

    // handle the action events for the cell-buttons
      gameBoard.board[0][0].setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent ae){
          gameBoard.board[0][0].setText(currentPlayer.getUserSymbol());
        }
      });
      gameBoard.board[0][1].setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent ae){
          gameBoard.board[0][1].setText(currentPlayer.getUserSymbol());
        }
      });
      gameBoard.board[0][2].setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent ae){
          gameBoard.board[0][2].setText(currentPlayer.getUserSymbol());
        }
      });
      gameBoard.board[1][0].setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent ae){
          gameBoard.board[1][0].setText(currentPlayer.getUserSymbol());
        }
      });
      gameBoard.board[1][1].setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent ae){
          gameBoard.board[1][1].setText(currentPlayer.getUserSymbol());
        }
      });
      gameBoard.board[1][2].setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent ae){
          gameBoard.board[1][2].setText(currentPlayer.getUserSymbol());
        }
      });
      gameBoard.board[2][0].setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent ae){
          gameBoard.board[2][0].setText(currentPlayer.getUserSymbol());
        }
      });
      gameBoard.board[2][1].setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent ae){
          gameBoard.board[2][1].setText(currentPlayer.getUserSymbol());
        }
      });
      gameBoard.board[2][2].setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent ae){
          gameBoard.board[2][2].setText(currentPlayer.getUserSymbol());
        }
      });

    // add the label and buttons to the scene graph
    rootNode.getChildren().addAll(gameBoard.board[0][0], gameBoard.board[0][1], gameBoard.board[0][2], gameBoard.board[1][0], gameBoard.board[1][1], gameBoard.board[1][2], gameBoard.board[2][0], gameBoard.board[2][1], gameBoard.board[2][2]);
    
    //show the stage and its scene
    myStage.show();

    //game
    while(!finished){
     //game on!
     isPlayer1 = !isPlayer1;
     finished = gameBoard.checkBoard();
    }
  }
}
ウプピエ 八十三 &lt;&lt; u-pu-pi-e hachi-ju-san, ik denk ik zeg het er maar ff bij :P
  zondag 4 november 2018 @ 13:06:59 #297
85514 ralfie
!Yvan eht nioj
pi_182935864
quote:
0s.gif Op zondag 4 november 2018 12:19 schreef uppie83 het volgende:
ZOooooo, eindelijk mijn eerste 'echte' oefening... het befaamde Tic Tac Toe. Om een beetje te oefenen met het framewerk van de toekomst wilde ik het in JavaFX maken. Het laatste hoofdstuk van het boek ging hier over, al was het niet zo uitgebreid. Tot nu toe heb ik alle compile errors en runtime exceptions volgens mij verholpen. Bij het opstarten blijft het geheel echter hangen. Wie kan mij verder helpen? Aub rekening houdend dat ik net begonnen ben met Java O-)

ps. Ja ik heb heel veel op internet gekeken, maar iedereen heeft een andere benadering, waardoor de code dusdanig anders is dat ik het dan compleet moet kopieren om er wat mee te kunnen.

ps 2. toch wel trots op mijzelf dat ik al zover kom zonder ook maar iets af te kijken :Y

cell
[ code verwijderd ]

board
[ code verwijderd ]

player
[ code verwijderd ]

game
[ code verwijderd ]

Je logica onder 'game' klopt voor geen meter.

-Je checkt alleen aan het begin van het spel wiens beurt het is, en thats it
-Je controleert of iemand gewonnen heeft xduizend keer per seconde waardoor het allemaal vast loopt.

Beurtwissel en winstcondities moet je controleren nadat iemand ergens op geklikt heeft, in de eventhandlers dus. Niet aan het begin van het snel (wordt niet meer geupdate) en ook niet in een loopje aan het eind (loopt de zaak van vast).

Heb je geen fatsoenlijke IDE om je code te debuggen?
pi_182937061
quote:
0s.gif Op zondag 4 november 2018 13:06 schreef ralfie het volgende:

[..]

Je logica onder 'game' klopt voor geen meter.

-Je checkt alleen aan het begin van het spel wiens beurt het is, en thats it
-Je controleert of iemand gewonnen heeft xduizend keer per seconde waardoor het allemaal vast loopt.

Beurtwissel en winstcondities moet je controleren nadat iemand ergens op geklikt heeft, in de eventhandlers dus. Niet aan het begin van het snel (wordt niet meer geupdate) en ook niet in een loopje aan het eind (loopt de zaak van vast).

Heb je geen fatsoenlijke IDE om je code te debuggen?
Context, http://www.contexteditor.org/index.php, is de BOM!!!!

Ik had in mijn boek begrepen dat je je eventhandlers juist zo kort en licht mogelijk moet houden. Vandaar dat ik de checks daar niet in wilde zetten. Wanneer het spel enkel in de console gespeeld zou worden dan zou het naar mijn idee een while(!wincondition) zijn. Maar nu ik het geheel ook nog in JavaFX moet plaatsen heb ik even geen idee hoe dat werkt.
ウプピエ 八十三 &lt;&lt; u-pu-pi-e hachi-ju-san, ik denk ik zeg het er maar ff bij :P
  zondag 4 november 2018 @ 15:58:24 #299
463823 Rodgrod
Lekker met vanillekwark
pi_182938669
quote:
0s.gif Op zondag 4 november 2018 14:18 schreef uppie83 het volgende:

[..]

Context, http://www.contexteditor.org/index.php, is de BOM!!!!

Ik had in mijn boek begrepen dat je je eventhandlers juist zo kort en licht mogelijk moet houden. Vandaar dat ik de checks daar niet in wilde zetten. Wanneer het spel enkel in de console gespeeld zou worden dan zou het naar mijn idee een while(!wincondition) zijn. Maar nu ik het geheel ook nog in JavaFX moet plaatsen heb ik even geen idee hoe dat werkt.
Je wilt je eventhandlers zo logisch mogelijk houden. Het is naar mijn mening best logisch dat bij een zet event er wordt gecontroleerd of er sprake is van winst en de speler wordt omgedraaid. Oftewel roep bij een zet iets van een methode aan genaamd ProcessTurn()

De while loop wordt constant uit gevoerd tot er voldaan is aan de conditie van de loop. Dat betekent dat je momenteel giga vaak in een seconde van speler wisselt en checkt of er sprake is van winst. Waarschijnlijk de reden dat de boel hangt. Als ik jou was zou ik de hele loop verwijderen.
❤️🐤🐤🐤🐤🐤🐤🐤🐤❤️
Doet rubber om staven
pi_182938977
Goed, naar aanleiding van jullie feedback ben ik al een heel stuk verder gekomen O+ Geen errors, exceptions of vastlopende dingen. Ook kan ik nu op de buttons klikken en komt er een X te staan. Helaas blijft het daar echter nog bij.

Update game
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
/* My own Tic-Tac-Toe game.
 */
 
import javafx.application.*;
import javafx.scene.*;
import javafx.stage.*;
import javafx.scene.layout.*;
import javafx.scene.control.*;
import javafx.event.*;
import javafx.geometry.*;

public class game extends Application{
  boolean isPlayer1 = true;
  boolean finished = false;
  
  public static void main(String[] args){

    //start the JavaFX application by calling launch()
    launch(args);
  }
  
  // override the start() method
  public void start(Stage myStage){
    board gameBoard = new board();
    player player1 = new player("X");
    player player2 = new player("O");
    player currentPlayer;

    if(isPlayer1){
      currentPlayer = player1;
    }
    else{
      currentPlayer = player2;
    }
    
    // give the stage a title
    myStage.setTitle("Tic-Tac-Toe");
    // use a flowpane for the root node. In this case,
    // vertical and horizontal gaps of 10
    GridPane rootNode = new GridPane();

    // center the controls in the scene
    rootNode.setAlignment(Pos.CENTER);
    // create a scene
    Scene myScene = new Scene(rootNode, 340, 340);
    // set the scene on the stage
    myStage.setScene(myScene);

    // handle the action events for the cell-buttons
      gameBoard.board[0][0].setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent ae){
          if(!finished){
            gameBoard.board[0][0].setText(currentPlayer.getUserSymbol());
            gameBoard.board[0][0].setText(currentPlayer.getUserSymbol());
            if(gameBoard.checkBoard()){
              finished = true;
              System.out.print(currentPlayer.getUserSymbol() + " has won!");
            }
            else{
              isPlayer1 = !isPlayer1;
            }
          }
        }
      });
      gameBoard.board[0][1].setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent ae){
          if(!finished){
            gameBoard.board[0][1].setText(currentPlayer.getUserSymbol());
            gameBoard.board[0][1].setText(currentPlayer.getUserSymbol());
            if(gameBoard.checkBoard()){
              finished = true;
              System.out.print(currentPlayer.getUserSymbol() + " has won!");
            }
            else{
              isPlayer1 = !isPlayer1;
            }
          }
        }
      });
      gameBoard.board[0][2].setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent ae){
          if(!finished){
            gameBoard.board[0][2].setText(currentPlayer.getUserSymbol());
            gameBoard.board[0][2].setText(currentPlayer.getUserSymbol());
            if(gameBoard.checkBoard()){
              finished = true;
              System.out.print(currentPlayer.getUserSymbol() + " has won!");
            }
            else{
              isPlayer1 = !isPlayer1;
            }
          }
        }
      });
      gameBoard.board[1][0].setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent ae){
          if(!finished){
            gameBoard.board[1][0].setText(currentPlayer.getUserSymbol());
            gameBoard.board[1][0].setText(currentPlayer.getUserSymbol());
            if(gameBoard.checkBoard()){
              finished = true;
              System.out.print(currentPlayer.getUserSymbol() + " has won!");
            }
            else{
              isPlayer1 = !isPlayer1;
            }
          }
        }
      });
      gameBoard.board[1][1].setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent ae){
          if(!finished){
            gameBoard.board[1][1].setText(currentPlayer.getUserSymbol());
            gameBoard.board[1][1].setText(currentPlayer.getUserSymbol());
            if(gameBoard.checkBoard()){
              finished = true;
              System.out.print(currentPlayer.getUserSymbol() + " has won!");
            }
            else{
              isPlayer1 = !isPlayer1;
            }
          }
        }
      });
      gameBoard.board[1][2].setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent ae){
          if(!finished){
            gameBoard.board[1][2].setText(currentPlayer.getUserSymbol());
            gameBoard.board[1][2].setText(currentPlayer.getUserSymbol());
            if(gameBoard.checkBoard()){
              finished = true;
              System.out.print(currentPlayer.getUserSymbol() + " has won!");
            }
            else{
              isPlayer1 = !isPlayer1;
            }
          }
        }
      });
      gameBoard.board[2][0].setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent ae){
          if(!finished){
            gameBoard.board[2][0].setText(currentPlayer.getUserSymbol());
            gameBoard.board[2][0].setText(currentPlayer.getUserSymbol());
            if(gameBoard.checkBoard()){
              finished = true;
              System.out.print(currentPlayer.getUserSymbol() + " has won!");
            }
            else{
              isPlayer1 = !isPlayer1;
            }
          }
        }
      });
      gameBoard.board[2][1].setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent ae){
          if(!finished){
            gameBoard.board[2][1].setText(currentPlayer.getUserSymbol());
            gameBoard.board[2][1].setState(currentPlayer.getUserSymbol());
            if(gameBoard.checkBoard()){
              finished = true;
              System.out.print(currentPlayer.getUserSymbol() + " has won!");
            }
            else{
              isPlayer1 = !isPlayer1;
            }
          }
        }
      });
      gameBoard.board[2][2].setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent ae){
          if(!finished){
            gameBoard.board[2][2].setText(currentPlayer.getUserSymbol());
            gameBoard.board[2][2].setText(currentPlayer.getUserSymbol());
            if(gameBoard.checkBoard()){
              finished = true;
              System.out.print(currentPlayer.getUserSymbol() + " has won!");
            }
            else{
              isPlayer1 = !isPlayer1;
            }
          }
        }
      });

    // add the label and buttons to the scene graph
    rootNode.add(gameBoard.board[0][0],0, 0, 1, 1);
    rootNode.add(gameBoard.board[0][1],0, 1, 1, 1);
    rootNode.add(gameBoard.board[0][2],0, 2, 1, 1);
    rootNode.add(gameBoard.board[1][0],1, 0, 1, 1);
    rootNode.add(gameBoard.board[1][1],1, 1, 1, 1);
    rootNode.add(gameBoard.board[1][2],1, 2, 1, 1);
    rootNode.add(gameBoard.board[2][0],2, 0, 1, 1);
    rootNode.add(gameBoard.board[2][1],2, 1, 1, 1);
    rootNode.add(gameBoard.board[2][2],2, 2, 1, 1);

    //show the stage and its scene
    myStage.show();

    /*game
    while(!finished){
     //game on!
     isPlayer1 = !isPlayer1;
     finished = gameBoard.checkBoard();
    } */
  }
}
ウプピエ 八十三 &lt;&lt; u-pu-pi-e hachi-ju-san, ik denk ik zeg het er maar ff bij :P
abonnement Unibet Coolblue
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')