Archief - [PROG][JAVA] Dobbelsteen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Messias.

Legacy Member
Hey man, calm down. Gewoon een randopmerking hoor, oh grote Java guru.

killgore

Legacy Member
jodeman zei:
En nu stoppen met de loze opmerkingen.

n/o, maar dat zijn geen loze opmerkingen. Hij is misschien fout, maar als hij dacht dat het deprecated was is dat zeer terecht dat op te merken.

Dat is zoals nog vele php-proggers (vond geen ander vb) nog ereg gebruiken ipv preg, terwijl die laatste vele beter is ... . Dan merk ik dat toch ook steeds op hoor.

SMa

Legacy Member
jodeman zei:
Man man man, run de code, kijk naar de uitkomst, er staan 6'en tussen.
Bij casten naar int houd hij rekening met afronding.
0.99999999999 * 6 + 1
= 6.99999999994 => 7!

gamer1

Legacy Member
Ik zal eve poste zoals ik t nu heb, waar ik dus ook die nullpointerexception mee krijg.
PHP:
import extrajava.*;
import java.util.Random;
import java.awt.*;

public class dobbelsteen 
{      private Random Dobbelsteen;
	public dobbelsteen()
	{	Random	dobbelsteen = new Random();			
	}												
	public int werp()
	{	int getal = (int)Dobbelsteen.nextInt(6);			
		int worp = (getal+1);									
		return worp;
	}
}

PHP:
import extrajava.*;
import java.util.Random;
import java.awt.*;

public class testdobbelsteen extends dobbelsteen		
{	public static void main(String[] args)				
	{	dobbelsteen ds1 = new dobbelsteen();
                 dobbelsteen ds2 = new dobbelsteen();
                 System.out.println("Ik heb juist " + ds1.werp() + " en " +
                 ds2.werp() + " geworpen!");
	}	
}

Messias.

Legacy Member
Maar man, in uw klasse "dobbelsteen" moet ge toch helemaal geen methode "dobbelsteen" meer implementeren. Dat hoort thuis in de methode "werp". :)
PHP:
import extrajava.*;
import java.util.Random;
import java.awt.*;

public class dobbelsteen 
{      											
	public int werp()
	{
		Random willekeurig = new Random();		
		int worp = willekeurig.nextInt(6) + 1;					
		return worp;
	}
}

gamer1

Legacy Member
Messias. zei:
Maar man, in uw klasse "dobbelsteen" moet ge toch helemaal geen methode "dobbelsteen" meer implementeren. Dat hoort thuis in de methode "werp". :)
PHP:
import extrajava.*;
import java.util.Random;
import java.awt.*;

public class dobbelsteen 
{      											
	public int werp()
	{
		Random willekeurig = new Random();		
		int worp = willekeurig.nextInt(6) + 1;					
		return worp;
	}
}

Mooi zo! Daar zat dus de fout. Nu werkt m precies. Merci! (aan iedereen trouwens die heeft meegeholpen) Das zo nie mn sterkste kant e, dien informatica.

Daedie

Legacy Member
Random dobbelsteen = new Random();

moet zijn:

Dobbelsteen = new Random();

eerste fout is dat ge eerst hoofdletter gebruik, dan weer niet, dus tis 2 keer een ander object, waarvan 1 eigenlijk nooit ergens is aangemaakt.
en dan ge declareert een random als member variable, en dan wilt ge die nog eens opnieuw declareren in uw constructor. ge moet natuurlijk alleen de gedeclareerd random initializeren.

ff terzijde: Dit zijn dingen die ge heel gemakkelijk zelf moet kunnen debuggen, debuggen is een belangrijk onderdeel van programmeren, moet ge dus ook aanleren. Ge zijt precies niet echt klaar om te programmeren, mss de cursus die ge gebruikt eens deftig (opnieuw) doornemen, en stap voor stap bijleren. Niet te snel willen gaan.

Kzie trouwens ook nog een hoop fouten ivm algemene programmeerovereenkomsten (hoofdletters, kleine letters, ...). Maar daar ga ik nu niet helemaal op ingaan, dat zou ge ook in uw cursus moeten terugvinden.

EDIT: ik zie dat Messias een andere oplossing al heeft gepost.

QplQyer

Legacy Member
Messias. zei:
Maar man, in uw klasse "dobbelsteen" moet ge toch helemaal geen methode "dobbelsteen" meer implementeren. Dat hoort thuis in de methode "werp". :)
PHP:
import extrajava.*;
import java.util.Random;
import java.awt.*;

public class dobbelsteen 
{      											
	public int werp()
	{
		Random willekeurig = new Random();		
		int worp = willekeurig.nextInt(6) + 1;					
		return worp;
	}
}
Erhm ... dat is zijn constructor gewoon misschien?
De echte fout is hierboven gezegd door HC_Daedalus, hoofdletters omgewisseld.

Messias.

Legacy Member
QplQyer zei:
Erhm ... dat is zijn constructor gewoon misschien?
De echte fout is hierboven gezegd door HC_Daedalus, hoofdletters omgewisseld.
Het kan, maar ik vind het nogal ongewoon om bij een constructor expliciet de public modifier te zetten. Wat ik opmaakte uit z'n code is dat hij nog een extra methode wou schrijven. Maar als dat inderdaad als constructor bedoeld was, dan was de fout inderdaad dat z'n hoofdletters omgewisseld waren. Trouwens, ik zie ook het nut niet in van een Random object aan te maken in de constructor. Soit, het probleem is opgelost.

QplQyer

Legacy Member
Messias. zei:
Het kan, maar het is nogal ongewoon om bij een constructor expliciet de public modifier te zetten. Wat ik opmaakte uit z'n code is dat hij nog een extra methode wou schrijven. Maar als dat inderdaad als constructor bedoeld was, dan was de fout inderdaad dat z'n hoofdletters omgewisseld waren. Trouwens, ik zie ook het nut niet in van een Random object aan te maken in de constructor. Soit, het probleem is opgelost.
Een public constructor is de normaalste zaak van de wereld. Je moet declareren of een ander object wel een object van dit type kan maken (dat kan bv. niet het geval zijn bij bepaalde patterns en dergelijke), ik schrijf dat er alleszins ook altijd bij.

Een Random object aanmaken in de constructor is gewoon propere initialisatie (en efficiënter, je moet maar éénmaal zo'n Random object gaan alloceren), dus zeker niet nutteloos.

*edit* public er niet bijvermelden zorgt er overigens niet voor dat het gedrag hetzelfde is als public:
http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html

killgore

Legacy Member
QplQyer zei:
Een public constructor is de normaalste zaak van de wereld.

what about singletons en consoorten :x?

Als je bedoelt public er expliciet bijzetten normaalste zaak: idd, altijd doen :), default is niet hetzelfde + het is duidelijker.

Messias.

Legacy Member
QplQyer zei:
Een Random object aanmaken in de constructor is gewoon propere initialisatie (en efficiënter, je moet maar éénmaal zo'n Random object gaan alloceren), dus zeker niet nutteloos.
Oké, daar had ik niet aan gedacht.

QplQyer zei:
*edit* public er niet bijvermelden zorgt er overigens niet voor dat het gedrag hetzelfde is als public:
http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html

Vandaar dat ik het ook maar vreemd vond, ik dacht dat default public impliceerde. Ik heb het alleszins nog nooit expliciet geschreven of zien geschreven worden. Maarja, zo gigantisch veel ervaring heb ik nu ook weer niet. :)

QplQyer

Legacy Member
killgore zei:
what about singletons en consoorten :x?

Als je bedoelt public er expliciet bijzetten normaalste zaak: idd, altijd doen :), default is niet hetzelfde + het is duidelijker.
Ik geef in de rest van mijn paragraaf toch aan dat het niet altijd zo hoeft te zijn, bij bepaalde patterns? Maar misschien wat verkeerd uitgedrukt, akkoord.

jodeman

Legacy Member
Private constructor komt alleen voor bij singleton.
Wat QplQyer zegt is wel juist in dit voorbeeld he, hier heb je helemaal geen singleton nodig en die andere wist het nut niet van de constructor (of dat het de constructor was..), dan moet ge dat wel even aanhalen. Ik denk wel dat hij bedoelde dat de constructor meestal public is, bij gewone objecten.
Maar ik snap het allemaal niet. Waarom ga je nu ooit een object van dobbelsteen aanmaken? Daar moet niet meer inzitten dan de methode werp. Doe die methode toch in een static context, er is geen verschil tussen twee methodes werp van twee objecten.
Kijk naar mijn oplossing... meer moet dat dus echt niet zijn imho.

gamer1

Legacy Member
Het is idd te zot om zo'n dom ding als een dobbelsteen in een aparte class te make, ma we moete nu eenmaal Object Georienteerd werke en dus werke met overerving en heel de nest. Mocht ik heel da spel in 1 bestand make, zonder overerving en polymorfisme te moete gebruike zou het veel simpeler zijn.

kaboem

Legacy Member
Het is niet zot om zo een ding in een aparte class te maken.
Als je zoals in je in je eerste post zegt, dat ding in meer spelletjes gaat gebruiken dan ga je je main classe niet vervuilen met uw dobbelsteen. Je wil die dobbelsteen gebruiken, het kan u op dat moment niets meer schelen hoe dat die juist werkt.
En als je het nooit met iets kleins gebrobeerd hebt zal je later ook niet weten hoe je het moet doen als het echt nodit is. :)

gamer1

Legacy Member
kaboem zei:
Het is niet zot om zo een ding in een aparte class te maken.
Als je zoals in je in je eerste post zegt, dat ding in meer spelletjes gaat gebruiken dan ga je je main classe niet vervuilen met uw dobbelsteen. Je wil die dobbelsteen gebruiken, het kan u op dat moment niets meer schelen hoe dat die juist werkt.
En als je het nooit met iets kleins gebrobeerd hebt zal je later ook niet weten hoe je het moet doen als het echt nodit is. :)

Das waar, ma as ge da zo op den moment moet doen is het toch wel balen. Ik verklein de kans wel om later iets groots tege te kome ivm programmere door niet voor een elektronica/ict richting te kieze na de kerstexames :)
Ma as ge vaak dezelfde dinge nodig hebt is OO programmere natuurlijk wel iets handigs(hoewel ik da liever nie wens te ontdekke om t te kunne bevestige:p).

jodeman

Legacy Member
kaboem zei:
Het is niet zot om zo een ding in een aparte class te maken.
Als je zoals in je in je eerste post zegt, dat ding in meer spelletjes gaat gebruiken dan ga je je main classe niet vervuilen met uw dobbelsteen. Je wil die dobbelsteen gebruiken, het kan u op dat moment niets meer schelen hoe dat die juist werkt.
En als je het nooit met iets kleins gebrobeerd hebt zal je later ook niet weten hoe je het moet doen als het echt nodit is. :)
Het ging helemaal niet over een aparte class, het ging over een apart object.
Ik vind dit :
Dobbelsteen steen = new Dobbelsteen();
System.out.println(steen.worp());
minder correct dan simpel Dobbelsteen.worp();
Dat laatste is properder, dat is alles wat ik zei.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan