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.

gamer1

Legacy Member
Heb een programmatje geschreve voor het simulere van werpen met 2 dobbelstenen in java, om dit in meerdere simpele spelletjes te kunne gebruike. Het programmatje voor de worpen uit te voeren met beide dobbelstenen werkt. Maar hoe krijg ik daar nu een methode "werp" in zodat ik die methode kan gebruike in de spelletjes?

public class dobbelsteen
public static void main(String[] args)

Random dobbelsteen1 = new Random();
int getal1 = dobbelsteen1.nextInt(6);

Dan heb ik die getalle nog +1 gedaan wanneer ze getoond worde(allee, eigenlijk in een aparte int, die ik dan toon)
Idem voor de 2e natuurlijk.

Als ik t volledig moet poste moete t ma zegge(tis nie veel meer dan da zenne)

Cyberkef

Legacy Member
(verkeerd forum btw, heb em effe gemoved en hernoemt zodat ie aan de regels voldoet)

Je gebruikt (in mijn vrije mening :p) mss beter een aparte klasse voor je Dobbelsteen en een aparte klasse als mainclass.

Bijvoorbeeld:

PHP:
public class Dobbelsteen
{
	private Random dobbelsteen;

	// Constructor
	public Dobbelsteen()
	{
		dobbelsteen = new Random();
	}

	public int werp ()
	{
		return dobbelsteen.nextInt(6) + 1; // Anders gaat het maar van 0 tot 5 zeker?
	}
}

Dan kun je in je main klasse dit gebruiken:

PHP:
public class Spelletje
{
	public static void main(String[] args)
	{
		Dobbelsteen ds = new Dobbelsteen();
		Dobbelsteen ds2 = new Dobbelsteen();
		System.out.println("Ik heb juist " + ds.werp() + " en " + ds2.werp() + " geworpen!");
	}
}

Hopelijk staan er geen kanjers van fouten in want het is al een serieus poos geleden dat ik nog java gebruikt heb :p

gamer1

Legacy Member
Cyberkef zei:
(verkeerd forum btw, heb em effe gemoved en hernoemt zodat ie aan de regels voldoet)

Je gebruikt (in mijn vrije mening :p) mss beter een aparte klasse voor je Dobbelsteen en een aparte klasse als mainclass.

Bijvoorbeeld:

PHP:
public class Dobbelsteen
{
	private Random dobbelsteen;

	// Constructor
	public Dobbelsteen()
	{
		dobbelsteen = new Random();
	}

	public int werp ()
	{
		return dobbelsteen.nextInt(6) + 1; // Anders gaat het maar van 0 tot 5 zeker?
	}
}

Dan kun je in je main klasse dit gebruiken:

PHP:
public class Spelletje
{
	public static void main(String[] args)
	{
		Dobbelsteen ds = new Dobbelsteen();
		Dobbelsteen ds2 = new Dobbelsteen();
		System.out.println("Ik heb juist " + ds.werp() + " en " + ds2.werp() + " geworpen!");
	}
}

Hopelijk staan er geen kanjers van fouten in want het is al een serieus poos geleden dat ik nog java gebruikt heb :p

Woeps, had precies naast t subforum van programming gekeke. Mijn excuses daarvoor en merci voor t te verplaatse en hernoeme.
Vermoedde al dak da moest opsplitse :) Zo zou het wel moete werke(allee, qua code weet ik nie zo direct, ma qua opbouw toch wel denk ik). Morge es probere.

Timmos

Legacy Member
aangezien je die waarden die worden geretourneerd door de methode int werp() nergens opslaat is het volgens mij nergens voor nodig dat je twee instanties van Dobbelsteen aanmaakt. Met één heb je voldoende.

SMa

Legacy Member
als je de waarden meteen optelt:
Code:
public byte dobbelsteen() {[INDENT]byte aantalOgen = (Math.random()*5+1) + (Math.random()*5+1);
return aantalOgen;[/INDENT]}

als je 2 aparte waarden wilt:
Code:
public byte[] dobbelsteen() {[INDENT]byte aantalOgen = new byte[2];
for (byte i = 0; i < aantalOgen.length; i++) {[INDENT](Math.random()*5+1);[/INDENT]return aantalOgen;[/INDENT]}

gamer1

Legacy Member
Als ik de eerste oplossing gebruik (van Cyberkef) krijg ik volgende 4 errors:
dobbelsteen.java:25: cannot find symbol

symbol : class Random
location: class dobbelsteen
{ private Random Dobbelsteen;
_________^
dobbelsteen.java:29: cannot find symbol
symbol : class Random
location: class dobbelsteen
{ Dobbelsteen = new Random();
________________ ^
dobbelsteen.java:33: operator + cannot be applied to Random.nextInt,int
{ return Dobbelsteen.nextInt(6) + 1;
______________________^
dobbelsteen.java:33: incompatible types
found : <nulltype>
required: int
{ return Dobbelsteen.nextInt(6) + 1;
_______________________ ^

gamer1

Legacy Member
Timmos zei:
aangezien je die waarden die worden geretourneerd door de methode int werp() nergens opslaat is het volgens mij nergens voor nodig dat je twee instanties van Dobbelsteen aanmaakt. Met één heb je voldoende.

Wat bedoel je met "2 instanties van dobbelsteen"? Zijn dit 2 dobbelstenen waarmee je werpt (in java dan e)?

Massis

Legacy Member
Dobbelsteen is uw klasse, hij maakt in de main klasse 2 nieuwe instanties (objecten) aan, dit zijn dus idd uw 2 dobbelstenen

wat Timmos zei is , omdat je die dobbelstenen maar heel even nodig hebt, ge evenzeer 2 keer snel kunt gooien met dezelfde dobbelsteen...

killgore

Legacy Member
ik heb niet heel de thread gelezen en denk dat de belangrijkste zaken al gezegd zijn, maar tcoh een kleine tip: probeer in het engels te programmeren.

Cyberkef

Legacy Member
Ik had het om het concept gedaan hé, niet om de meest optimale oplossing :p

gamer1 zei:
Als ik de eerste oplossing gebruik (van Cyberkef) krijg ik volgende 4 errors:

Om Random te gebruiken ga je prolly nog moeten iets importeren, maar al schiet je me dood, dat kan ik mij echt niet meer herinnern (is al meer dan paar jaar geleden :p).

import java.util.*;

of

import java.util.Random;

gamer1

Legacy Member
Cyberkef zei:
Ik had het om het concept gedaan hé, niet om de meest optimale oplossing :p



Om Random te gebruiken ga je prolly nog moeten iets importeren, maar al schiet je me dood, dat kan ik mij echt niet meer herinnern (is al meer dan paar jaar geleden :p).

import java.util.*;

of

import java.util.Random;

Ja, had die dingen al geimporteerd. Krijg nu zowel bij dobbelsteen als bij spelletje "no errors", maar als ik ze probeer te runnen krijg ik:
Exception in thread "main" java.lang.NullPointerException
at dobbelsteen.werp(dobbelsteen.java:34)
at Spelletje.main(Spelletje.java:7)
Process Exit...

Iemand die weet waar het aan ligt/wat ik moet verandere?

jodeman

Legacy Member
gamer1 zei:
Ja, had die dingen al geimporteerd. Krijg nu zowel bij dobbelsteen als bij spelletje "no errors", maar als ik ze probeer te runnen krijg ik:
Exception in thread "main" java.lang.NullPointerException
at dobbelsteen.werp(dobbelsteen.java:34)
at Spelletje.main(Spelletje.java:7)
Process Exit...

Iemand die weet waar het aan ligt/wat ik moet verandere?
Nullpointerexception krijgt ge als ge als ge naar een object refereert dat nog niet geinstantieerd is.
Heb je al Dobbelsteen dobbelsteen = new Dobbelsteen(); ?
ik denk het niet. ;)

Messias.

Legacy Member
Dobbelsteen = new Random();
????


Bedoelt ge nie: Dobbelsteen teerling = new Dobbelsteen();

? :)

jodeman

Legacy Member
Code:
public class Run {
	public static void main(String[] args) {
		for (int i = 0; i < 100; i++) {
			System.out.println("Dobbel 1 : " + Dobbelsteen.werp());
			System.out.println("Dobbel 2 : " + Dobbelsteen.werp());
		}
	}
}
Code:
public class Dobbelsteen {
	public static int werp() {
		return (int) (Math.random() * 6) + 1;
	}
}
Meer moet dat niet zijn denk ik.
Wat een foute dingen dat hier al gezegd zijn man :p.

Messias.

Legacy Member
jodeman zei:
Code:
public class Dobbelsteen {
	public static int werp() {
		return (int) (Math.random() * 6) + 1;
	}
}
Meer moet dat niet zijn denk ik :).

Dat gaat ook werken hoor, maar ik meen me te herinneren dat Math.random nogal deprecated is. In plaats daarvan zou ik schrijven:
Code:
public class Dobbelsteen {
	public static int werp() {
		Random r = new Random();
		return r.nextInt(6) + 1;
	}
}

is "moderner"

SMa

Legacy Member
jodeman zei:
Meer moet dat niet zijn denk ik :).
behalve dan dat 0.99 * 6 + 1 gelijk is aan 7 & dat een dobbelsteen maar 6 ogen heeft ;)
=> 0.99 * 5 + 1


@TS
waarom zou je een volledig nieuwe klasse of methode willen voor zoiets simpels als een dobbelsteen?
Math.round(Math.random() * 5 + 1); is toch stukken efficiënter dan telkens een methode oproepen

jodeman

Legacy Member
SMa zei:
behalve dan dat 0.99 * 6 + 1 gelijk is aan 7 & dat een dobbelsteen maar 6 ogen heeft ;)
=> 0.99 * 5 + 1


@TS
waarom zou je een volledig nieuwe klasse of methode willen voor zoiets simpels als een dobbelsteen?
Math.round(Math.random() * 5 + 1); is toch stukken efficiënter dan telkens een methode oproepen
Man man man, run de code, kijk naar de uitkomst, er staan 6'en tussen.
Bij casten naar int houd hij rekening met afronding.

killgore

Legacy Member
Messias. zei:
Dat gaat ook werken hoor, maar ik meen me te herinneren dat Math.random nogal deprecated is. In plaats daarvan zou ik schrijven:
Code:
public class Dobbelsteen {
	public static int werp() {
		Random r = new Random();
		return r.nextInt(6) + 1;
	}
}

is "moderner"

heeft vooral met seeds te maken iirc.

Messias.

Legacy Member
SMa zei:
@TS
waarom zou je een volledig nieuwe klasse of methode willen voor zoiets simpels als een dobbelsteen?
Math.round(Math.random() * 5 + 1); is toch stukken efficiënter dan telkens een methode oproepen

Ik denk dat het een oefening is, en ik denk dat de bedoeling is zo strikt mogelijk de OO doctrines te volgen, en niet om zo efficient mogelijk code te schrijven. Allé, 't is maar gedacht ze. ;)

jodeman

Legacy Member
Messias. zei:
Dat gaat ook werken hoor, maar ik meen me te herinneren dat Math.random nogal deprecated is. In plaats daarvan zou ik schrijven:
Code:
public class Dobbelsteen {
	public static int werp() {
		Random r = new Random();
		return r.nextInt(6) + 1;
	}
}

is "moderner"
MAN MAN MAN, Math.random is evengoed, bij random klasse hebt ge gewoon het voordeel dat ge intervallen kunt gebruiken en met hogere getallen werken. :doh:
En nu stoppen met de loze opmerkingen.
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