In PHP zitten PDO en MySQL gewoon in de Standard PHP Libraries. In de context van C# zal dit wel op dezelfde manier gaan denk ik.quote:Op woensdag 24 oktober 2018 11:30 schreef FlippingCoin het volgende:
[..]
In de C# libraries en frameworks ben ik totaal niet thuis.![]()
Maar je zal toch geen framewoek nodig hebben om een database te kunnen gebruiken?
Ah oké, met Go moet je gewoon een library kiezen om met een DB te werken.quote:Op woensdag 24 oktober 2018 11:39 schreef DevFreak het volgende:
[..]
In PHP zitten PDO en MySQL gewoon in de Standard PHP Libraries. In de context van C# zal dit wel op dezelfde manier gaan denk ik.Wat ik me dan wel afvraag is op ADO.NET ook beschikbaar is voor .NET Core.
Vroegah gebruikte ik onder PHP ook lange strings voor CRUD-acties maar het is gewoon achterhaald vind ik. Sommigen halen de argumenten dat het meer systeembronnen kost weleens van stal maar dat gaat in deze tijd niet echt meer op.
Volgens mij denk ik ook weer eens veel te ingewikkeld en zal ADO wel gewoon een naampje zijn voor het DB-onderdeel van .NET.
volgens mij is het nog steeds actueel en is Entity Framework een abstractielaag-saus tussen jou en ADO.quote:Op woensdag 24 oktober 2018 12:04 schreef mschol het volgende:
ADO.net is onderdeel van het .net 3.0 framework, getuige dit diagrammetje:
https://en.wikipedia.org/wiki/ADO.NET#/media/File:DotNet3.0.svg
https://www.c-sharpcorner(...)dia/what-is-ado-net/
Voor C# is MsSQL wel echt een aanrader. De combinatie C#, visual studio, (T)sql en SQL Server Management Studio is allemaal gratis te downloaden en installeren en werkt heerlijk samen, zelfs (zeker) als je je beperkt tot entity framework (EF).quote:Op woensdag 24 oktober 2018 10:24 schreef DevFreak het volgende:
Hey hoe is het met jullie?![]()
Ik heb nu wat tijd om me te verdiepen in C#. Ik kan alleen zo weinig duidelijke informatie vinden over opslagmethoden...
Wat voor manieren bestaan er om met databases om te gaan? Wat voor manieren heb je om op afstand te verbinden en DB's lokaal te gebruiken op bv. een server of mobiel apparaat?
Zelf kom ik echt uit de PHP-wereld en heb ik me altijd een beetje beperkt tot MySQL. Heb even een duw in de juiste richting nodig.
Tnx voor je heldere antwoord.quote:Op woensdag 24 oktober 2018 13:40 schreef ralfie het volgende:
[..]
Voor C# is MsSQL wel echt een aanrader. De combinatie C#, visual studio, (T)sql en SQL Server Management Studio is allemaal gratis te downloaden en installeren en werkt heerlijk samen, zelfs (zeker) als je je beperkt tot entity framework (EF).
EF is inderdaad een abstractielaag die het makkelijk maakt om MVC-gericht te developen. Je bouwt je tabellen in sql, importeert deze richting visual studio en deze maakt dan default pages voor viewen, editen, toevoegen & deleten van rijen. EF maakt default gebruik van Linq queries die vertaalt worden naar sql zodra ze uitgevoerd moeten worden. EF werkt prima, totdat je bij grotere datasets uitkomt (miljoenen inserts), maar daarvoor kun je dan weer terugvallen op de onderliggende infrastructuur zoals ADO.net. vziw is EF niet beschikbaar voor .net core, maar dat kan ondertussen anders zijn.
https://code.tutsplus.com(...)t-laravel--cms-27247quote:Op woensdag 24 oktober 2018 12:56 schreef DevFreak het volgende:
[..]
Ik heb ooit zelf een soort van ORM gemaakt in PHP
Ik was dat al snel beu.
Nee weet ik, ik ben al een paar jaar met Laravel bezig geweestquote:Op vrijdag 26 oktober 2018 11:06 schreef cablegunmaster het volgende:
[..]
https://code.tutsplus.com(...)t-laravel--cms-27247
Eloquent lost dit op, ipv zelfbouw.
C# repositories? Nuget?? of wat bedoel jequote:Op zondag 28 oktober 2018 11:26 schreef DevFreak het volgende:
Wauw, frustrerend dit zeg.![]()
Ik heb een goede video-tutorial gevonden waar je een P2P-programma maakt. Wat de gedachtegang is achter code wordt niet echt uitgelegd dus het voelt nogal als acacedabra.
De C#-impelementatie van repositories en WCF komen ook aan bod dus dat is een behoorlijk ppittige hap voor mij. Wat winden jullie, misschien eeen stapje terug doen voor nu?
Misschien pas verdergaan zodra je weer nuchter bent?quote:Op zondag 28 oktober 2018 11:26 schreef DevFreak het volgende:
Wauw, frustrerend dit zeg.![]()
Ik heb een goede video-tutorial gevonden waar je een P2P-programma maakt. Wat de gedachtegang is achter code wordt niet echt uitgelegd dus het voelt nogal als acacedabra.
De C#-impelementatie van repositories en WCF komen ook aan bod dus dat is een behoorlijk ppittige hap voor mij. Wat winden jullie, misschien eeen stapje terug doen voor nu?
Bedoel je het repository pattern?quote:Op zondag 28 oktober 2018 11:26 schreef DevFreak het volgende:
Wauw, frustrerend dit zeg.![]()
Ik heb een goede video-tutorial gevonden waar je een P2P-programma maakt. Wat de gedachtegang is achter code wordt niet echt uitgelegd dus het voelt nogal als acacedabra.
De C#-impelementatie van repositories en WCF komen ook aan bod dus dat is een behoorlijk ppittige hap voor mij. Wat winden jullie, misschien eeen stapje terug doen voor nu?
1 2 | import java.awt.*; import java.awt.event.*; |
quote:Op zondag 28 oktober 2018 18:58 schreef ralfie het volgende:
[..]
C# repositories? Nuget?? of wat bedoel je
Je moet je inlezen in wat je nodig hebt of interessant vindt, niet meer niet minder. Als je met P2P wil beginnen zul je wat exotischere kanten van C# moeten exploreren. Geen idee of WCF daar de beste oplossing voor is, maar het lijkt een goede kanshebber.
quote:Op zondag 28 oktober 2018 21:14 schreef thabit het volgende:
[..]
Misschien pas verdergaan zodra je weer nuchter bent?
Ghehe, sorry voor de verwarring. Ik heb wel ervaring met dergelijke designpatronen hoor, begrijp me niet verkeerd. Ik had het idee te switchen richting de .NET wereld, maar ik weet niet of het nou zo mijn taal/omgeving is.quote:Op maandag 29 oktober 2018 10:32 schreef Rodgrod het volgende:
[..]
Bedoel je het repository pattern?
Dat is in het algemeen wel een nuttige om eens gedaan te hebben
En persoonlijk zal ik er mee door gaan, des te moeilijker des te meer voldoening en zelfvertrouwen het je geeft als het uiteindelijk is gelukt
jaaren geleden ooit gepoogd in C++ een soort javascript achtige taal te bouwen. Parser en lexer zijn redelijk makkelijk te schrijven (en leuk als het dan eenmaal werkt), maar het implementeren van basislogica (o.m. standaard operators voor alle basis datatyes) is verschrikkelijk saai (en daar is het dus ook bij geblevenquote:Op maandag 29 oktober 2018 19:59 schreef FlippingCoin het volgende:
Voor mijn studie moeten wij nu het boek Concepts of Programming Languages lezen, vind het wel een boeiend boek en het gaat ook over de werking van een compiler en de semantiek en syntax van een programmeertaal.
Heeft hier iemand ooit eens een compiler of interpreter gemaakt voor een zelfbedachte taal?
Pelu anu ni mo ki yin Flip.
Ah ja dat kan ik mij redelijk voorstellen.quote:Op maandag 29 oktober 2018 20:56 schreef ralfie het volgende:
[..]
jaaren geleden ooit gepoogd in C++ een soort javascript achtige taal te bouwen. Parser en lexer zijn redelijk makkelijk te schrijven (en leuk als het dan eenmaal werkt), maar het implementeren van basislogica (o.m. standaard operators voor alle basis datatyes) is verschrikkelijk saai (en daar is het dus ook bij gebleven).
1 | int a = test ? b : c; |
1 2 3 4 5 | if(test){ a = b; } else{ a = c; } |
het is wel ernstig heb nu dus een werkend R pakket, dat hopelijk snel gepubliceerd wordt en ik ben nu alweer bezig met een versie 2 ervan... ik wil zoveel dingen anders aanpakken.... volgensmij is dat ook iets wat je eindeloos kunt blijven doen. Tijdens het maken van software introduceer je ideeën die later wel of niet handig blijven.. nu begin ik opnieuw en denk ik alles glad te strijken, totdat er weer nieuwe ideeën komenquote:Op maandag 29 oktober 2018 20:02 schreef FlippingCoin het volgende:
Ah ja en nog een leuk boek waar ik bezig ben is Exercises in Programming Style, boek gaat over een triviaal programma om de woorden in een tekst te tellen, en de 25 meestvoorkomende woorden te printen. Dit programma wordt vervolgens volgens 33 verschillende paradigma gemaakt.
Ystävällisin terveisin Flip.
Die is soms wel echt fijn ja, maar soms maakt die het alleen maar meer onleesbaar daar zou ik mee oppassen.quote:Op dinsdag 30 oktober 2018 11:06 schreef Bosbeetle het volgende:
Ik ontdek net pas de tenary operator dus
[ code verwijderd ]
ipv
[ code verwijderd ]
had hem volgensmij al eens eerder gezien maar nog nooit gebruikt dus hij zit niet in mijn systeem...
Ben even opzoek gegaan in mijn code of ik wat kon vervangen maar ik gebruik het ook niet zo vaak
Ja dat zeker, dit boek behandelt vooral het perspectief van waaruit je naar een probleem kijkt.quote:Op dinsdag 30 oktober 2018 11:12 schreef Bosbeetle het volgende:
[..]
het is wel ernstig heb nu dus een werkend R pakket, dat hopelijk snel gepubliceerd wordt en ik ben nu alweer bezig met een versie 2 ervan... ik wil zoveel dingen anders aanpakken.... volgensmij is dat ook iets wat je eindeloos kunt blijven doen. Tijdens het maken van software introduceer je ideeën die later wel of niet handig blijven.. nu begin ik opnieuw en denk ik alles glad te strijken, totdat er weer nieuwe ideeën komen
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 nietquote:Op dinsdag 30 oktober 2018 11:59 schreef FlippingCoin het volgende:
[..]
Ja dat zeker, dit boek behandelt vooral het perspectief van waaruit je naar een probleem kijkt.![]()
Hom regards Flip.
Waarom wil je dat niet?quote: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
Omdat ik altijd vind dat we meer moeten kunnen dan ik van te voren bedacht....quote:Op dinsdag 30 oktober 2018 12:02 schreef FlippingCoin het volgende:
[..]
Waarom wil je dat niet?
Ar cieņu Flip.
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; } } |
Maar je kan toch abstraheren en uitbreidbaar ontwerpen?quote: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...
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
Ik ben ook geen programmeur, kun jij misschien naar mijn edit kijken of daar handiger op lossingen voor zijn....quote:Op dinsdag 30 oktober 2018 12:18 schreef FlippingCoin het volgende:
[..]
Maar je kan toch abstraheren en uitbreidbaar ontwerpen?
आपला आभारी Flip.
Constructor overloading en dan de constructor met minder argumenten de Z waarden op 0 zetten? Denk dat dat de Java manier is.quote: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.
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.quote: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.
мэндчилсэн Flip.
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?quote: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.
dat is wel een slimmequote: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.
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; } } |
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; } } |
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; } } |
Ik moet moeite doen om je code te volgen, en dat is iha een teken dat je code te chaotisch is.quote: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?
Ja dat versie 1 dus niet maar daar zit dan weer heel veel duplicatie in.quote: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-allergieHet 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...
Tuurlijk heb je leren programmeren anders had je dit niet al gehadquote: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
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); } } } } |
Ah okay dit snap ik maar als wetenschapper heb ik liever toegang tot mijn eigen methodesquote:Op dinsdag 30 oktober 2018 20:43 schreef ralfie het volgende:
[..]
Tuurlijk heb je leren programmeren anders had je dit niet al gehadIk 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.
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); } } } } |
De gebruikte versie van je library kan je vastzetten, vrijwel alle grote systemen gebruiken libraries.quote: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.hoevaak ik wel niet normalisatie functies heb gezien die echt rare dingen met je data doen, terwijl zo makkelijk zelf te schrijven zijn....
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.quote: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?
Snap ik ik werk nu met imagej dus ik zit ook al aan een api/library vastquote: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.
Iets duidelijker gezegd ik heb dus class1 met x en y, en die wordt geextend naar class2 met een z.quote: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.
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); |
Zoals in jouw voorbeeld, zou je attribuut a moeten opnemen als:quote: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?
1 | protected int a = 6; |
Jup net getest en dat kan, of public... maar protected is beter.quote: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.
quote: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(); |
ja iets dergelijks werkt wel...quote:Op woensdag 31 oktober 2018 13:21 schreef FlippingCoin het volgende:
[..]
[ code verwijderd ]
zo ongeveer, hoop ik, java is even geleden.
Հարգանքներով Flip.
Ja het tegengaan van redundancy is sowieso een hoeksteen van betere code, dat en leesbaarheid.quote:Op woensdag 31 oktober 2018 13:45 schreef Bosbeetle het volgende:
[..]
ja iets dergelijks werkt wel...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....
SOLID principles.quote: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
Lijkt erop als java niet dé taal is voor jou, kijk eens naar het functionele paradigma.quote: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.
Ik gebruik ook voornamelijk R wat functioneel is.quote: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.
Ah ja R is een stuk beter daarvoor ja.quote: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.
maar R is weer een stuk slechter in beelden... en soms plak ik toch weer c++ in r dmv rccpquote:Op donderdag 1 november 2018 15:45 schreef FlippingCoin het volgende:
[..]
Ah ja R is een stuk beter daarvoor ja.
R functioneel? Procedureel, zeker. object-oriented: ook wel, maar functioneel?quote: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.
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.quote: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?quote: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.
Sorry, had moeten zeggen medische (radiology) images. Je hebt helemaal gelijk dat microscopie-achtige bewerkingen vaak met java gedaan worden (volgens mij volledig vanwege imagejquote: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?
Een stuk duidelijker (zul je zelf ook wel gemerkt hebben?) hoewel ik persoonlijk toch eerder vector2d/vector3d zou gebruiken. Dat is geen exotische codequote:Op donderdag 1 november 2018 19:04 schreef Bosbeetle het volgende:
[..]
Wat vind je trouwens van mijn laatste versie van dat stukje code?
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()); } } |
Omdat je een methode definieert in je main methode. Zet hem er buiten en hij werkt, mits het een static methode is.quote: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 ]
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; } } |
oh zo simpel... okquote: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 ]
Dat herinner ik mij ook nog wel.quote: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 ]
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; } } |
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; } } |
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; } } |
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(); } } } |
Je logica onder 'game' klopt voor geen meter.quote: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![]()
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![]()
cell
[ code verwijderd ]
board
[ code verwijderd ]
player
[ code verwijderd ]
game
[ code verwijderd ]
Context, http://www.contexteditor.org/index.php, is de BOM!!!!quote: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?
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()quote: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.
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(); } */ } } |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |