# Würfel Pasch



## prodonn (29. Aug 2012)

Hi,
wie schreibe ich ein programm, das solange würfelt bis ein pasch kommt?


----------



## KingOfExceptions (29. Aug 2012)

Mit GUI und allem drum und dran oder nur auf der Konsole?


----------



## bone2 (29. Aug 2012)

```
do {

ergebnisA = würfel()
ergebnisB = würfel()

} while (ergebnisA != ergebnisB)
```

das sind primitive grundlagen, das hat man in der 2. unterrichtsstunde. schau dir mal schleifen und verzweigungen an...


----------



## Gast2 (29. Aug 2012)

bone2 hat gesagt.:


> ```
> do {
> 
> ergebnisA = würfel()
> ...



Dann doch lieber nur einen Würfel werfen und den anderen auf den selben Wert setzen


----------



## bone2 (29. Aug 2012)

EikeB hat gesagt.:


> Dann doch lieber nur einen Würfel werfen und den anderen auf den selben Wert setzen



Die Idee gefällt mir


----------



## KingOfExceptions (29. Aug 2012)

Ist wahrscheinlich nicht soooo optimal aber es funktioniert 


```
import java.util.Random;

public class PaschWuerfel
{
	public static void main(String[] args)
	{
		int ergebnis1;
		int ergebnis2;
		do
		{
			ergebnis1=wuerfeln();
			try
			{
				Thread.sleep((long) new Random().nextDouble());
			}
			catch (InterruptedException e)
			{
				e.printStackTrace();
			}
			ergebnis2=wuerfeln();
			System.out.println("Wurf 1: "+ergebnis1+" ; Wurf 2: "+ergebnis2);
			
		}while(ergebnis1!=ergebnis2);
	}
	
	static int wuerfeln()
	{
		return new Random().nextInt(6)+1;
	}
}
```


----------



## bone2 (29. Aug 2012)

a) warum kaust du ihm alles vor?

b) warum legst du den thread random 0 ms schlafen?

edit: ah, die sig, eine danke hure


----------



## KingOfExceptions (29. Aug 2012)

bone2 hat gesagt.:


> a) warum kaust du ihm alles vor?
> 
> b) warum legst du den thread random 0 ms schlafen?



a) mir war grad langweilig... 
b) wieso 0ms? damit man nicht mehrmals hintereinander die gleichen zahlen kriegt. 


			
				Galileo Computing hat gesagt.:
			
		

> Bevor der Zeitwert in eine Fließkommazahl umgewandelt wird, ist noch eine weitere Überlegung erforderlich. Wenn Sie die Zufallszahlengenerierung mehrmals hintereinander aufrufen, ähneln sich die ersten Zufallszahlen sehr, denn der Startwert ändert sich dort erst circa in der achten Nachkommastelle.



EDIT: eine danke HURE?! was soll das denn? nur weil ich ein danke für einen nützlichen beitrag verdient finde? heute vergreifen sich aber eine menge im tonfall.... :shock:


----------



## faetzminator (29. Aug 2012)

KingOfExceptions hat gesagt.:


> a) mir war grad langweilig...


Wenn du dir den anderen Thread des TO anschaust, kannst du dir die Zeit mit kotzen ausfüllen 


KingOfExceptions hat gesagt.:


> b) wieso 0ms? damit man nicht mehrmals hintereinander die gleichen zahlen kriegt.


Auch wenn tatsälich meist die Systemzeit eine Rolle spielt, halte ich die dort aufgeführten Erläuterungen nicht gerade als Musterbeispiel. Und wenn, dann kann man gleich [c]Thread.yield()[/c] verwenden 



KingOfExceptions hat gesagt.:


> nur weil ich ein danke für einen nützlichen beitrag verdient finde?


Das wird nützlich, sobald man "Danke" gegen EUR eintauschen kann... Ansonsten können wir es wie immer machen: Hose runter, Sch****vergleich! (Ich will damit zum Ausdruck bringen, dass die Diskussion über "Danke" sinnlos ist)


----------



## Bile Demon (29. Aug 2012)

KingOfExceptions hat gesagt.:


> wieso 0ms?



Ich glaube er will darauf hinaus, dass 
	
	
	
	





```
(long) new Random().nextDouble()
```
 Quatsch ist, weil da immer 0 rauskommt.


----------



## KingOfExceptions (29. Aug 2012)

faetzminator hat gesagt.:


> Das wird nützlich, sobald man "Danke" gegen EUR eintauschen kann... Ansonsten können wir es wie immer machen: Hose runter, Sch****vergleich! (Ich will damit zum Ausdruck bringen, dass die Diskussion über "Danke" sinnlos ist)



Jetzt kommt doch alle mal runter... Für so ein kleines Mini-Programm braucht man doch nichts zahlen... zumindest nicht, wenn mir langweilig ist   Fazit: Die Danke-Diskussion ist hier fehl am Platze.


----------



## bone2 (29. Aug 2012)

KingOfExceptions hat gesagt.:


> b) wieso 0ms? damit man nicht mehrmals hintereinander die gleichen zahlen kriegt.
> 
> EDIT: eine danke HURE?! was soll das denn? nur weil ich ein danke für einen nützlichen beitrag verdient finde? heute vergreifen sich aber eine menge im tonfall.... :shock:



b) ein 0.xyz double auf int gecasted ist immer 0
es vergehen eh schon cycles, wo er beispielsweise die 1 im würfeln zum random ergbnis addiert, sleep ist imo unnötig.


```
for(int i = 1; i < 100; i++) {
            int a = new Random().nextInt(6)+1;
            int b = new Random().nextInt(6)+1;
            System.out.println(a + " " + b);
        }
```

[OT]posten nur weil man danke sammeln will. bin ich großer fan von, vor allem wenn man esnoch in so aufdringlicher großer roter schrift 2mal in der sig verlangt. user werden sich schon bedanken wenn sie es für angemessen halten. der danke button hat nicht wirklich einen sinn und ist imo total überflüssig[/OT]


----------



## KingOfExceptions (29. Aug 2012)

Bile Demon hat gesagt.:


> Ich glaube er will darauf hinaus, dass
> 
> 
> 
> ...



Das stimmt aber nicht.... Ich hab mal den Test gemacht:


```
0.94525486
0.12616083
0.66240716
0.44997197
0.08774629
0.31162557
0.034802414
0.9388701
0.6829761
0.6609974
0.6243153
0.16821659
```


----------



## bone2 (29. Aug 2012)

KingOfExceptions hat gesagt.:


> Das stimmt aber nicht.... Ich hab mal den Test gemacht:
> 
> 
> ```
> ...


dann caste die ergebnisse mal auf 
	
	
	
	





```
(long)
```


----------



## KingOfExceptions (29. Aug 2012)

bone2 hat gesagt.:


> dann caste die ergebnisse mal auf
> 
> 
> 
> ...



Sind schon  und damit es dich beruhigt: jetzt halt keine sig mehr.


----------



## bone2 (29. Aug 2012)

KingOfExceptions hat gesagt.:


> Sind schon


longs haben aber selten kommastellen


----------



## KingOfExceptions (29. Aug 2012)

gucks dir selbst an:


```
while(true)
		{
			System.out.println((float)new Random().nextDouble());
			System.out.println(new Random().nextDouble());
		}
```

bei mir: 

```
0.35304937050031937
0.57134867
0.08915329762139412
0.50101256
0.8350171473768307
0.10843991
0.12935842168212308
0.5716726
0.1814527523930266
0.34938252
0.8976548457419956
0.44961387
0.22339332215266905
0.021389892
0.6685597804250061
0.93727386
0.15727694166815864
0.010215317
0.01408403087556176
0.23602504
0.15169041755660528
0.6871222
0.03415573352586265
0.6091017
0.16813481123190044
0.9008272
0.34578191840035444
0.8937171
0.8841820898809468
0.6847016
0.5749515258714147
0.4232552
0.3876110281928201
0.35756648
0.2683719929934676
0.6901733
0.2706738913233484
0.79659474
0.12379776572231871
0.5687502
0.8481165343921588
0.10041666
0.9213374094112482
0.69680667
0.90146875798269
0.051615387
0.05092268793704846
0.9730155
0.22554008042849194
0.35392022
0.47071418655613095
0.07187537
0.5737426403183031
0.11542147
0.8491184275948734
0.6358773
0.43576046031027693
0.97530526
0.6821506877956487
0.6857569
0.9576658881384938
0.2565417
```


----------



## KingOfExceptions (29. Aug 2012)

hier stand was falsches


----------



## bone2 (29. Aug 2012)

KingOfExceptions hat gesagt.:


> gucks dir selbst an:
> 
> 
> ```
> ...


ähm nu ist es ohne 
	
	
	
	





```
(long)
```
 und mit 
	
	
	
	





```
(float)
```
?


```
for(int i = 1; i < 100; i++) {
            System.out.print((long) new Random().nextDouble());
            System.out.print(" ");
        }
```


```
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
```



KingOfExceptions hat gesagt.:


> willst du nochmal ein anfänger tut machen  tut


les dir lieber nochmal durch, was du oben geschrieben hast


----------



## Bile Demon (29. Aug 2012)

KingOfExceptions hat gesagt.:


> gucks dir selbst an:
> 
> 
> ```
> ...



Bei mir sieht das irgendwie wie ein Cast nach float aus.


----------



## KingOfExceptions (29. Aug 2012)

ok ich lese mir selbst das tut wohl noch ein wenig besser durch 

ok trotzdem mal die frage: wieso sollte man das denn dann nicht zwischen zwei randoms machen?


```
for(int x=0; x<10000; x++);
```

in der insel steht es ja auch:



> Bevor der Zeitwert in eine Fließkommazahl umgewandelt wird, ist noch eine weitere Überlegung erforderlich. Wenn Sie die Zufallszahlengenerierung mehrmals hintereinander aufrufen, ähneln sich die ersten Zufallszahlen sehr, denn der Startwert ändert sich dort erst circa in der achten Nachkommastelle.


----------



## Gast2 (29. Aug 2012)

Wenn man das richtig implementiert ist es völlig egal wieviel Zeit zwischen zwei Zufallszahlen vergeht. Du musst einfach nur eine Instanz von Random erzeugen.


```
Random rand = new Random();
for (...) {
  double doubleVal = rand.nextDouble();
}
```

Das Problem bei deiner Variante ist folgendes:
Der Defaultkonstruktor von Random verwendet System.nanoTime() als seed, wenn du viele Random Instanzen schnell hintereinander erzeugst kanns durchaus vorkommen dass sich die seeds ähneln. Aber eine Random Instanz reicht doch auch?! Es ist außerdem testfreundlicher, da du nen festen seed übergeben kannst und immer die selben Zufallszahlen bekommst.


----------



## bone2 (29. Aug 2012)

KingOfExceptions hat gesagt.:


> in der insel steht es ja auch:


link? find das in der aktuellen version der insel nicht.

new Random() erzeugt ja einen neuen Pseudogenerator auf der Basis von nano. Das dürfte, durch die aktionen zwischen den beiden random aufrufen verstrichene zeit, genug untershcied für solche einfache fälle wie das hier liefern. es ist nur nicht genug für kryptographie


----------



## KingOfExceptions (29. Aug 2012)

Achso ok, das erklärt dann so einiges... Vielen Dank! (Kein Klick auf den Danke-Button, da bone2 diesen ja unnötig findet)


----------



## Crian (29. Aug 2012)

Dafür hab ich ihn mal gedrückt. *grinst*

Sicher sind diese Danke-Butons nicht wirklich wichtig. Man bräuchte sie nicht. Trotzdem freue ich mich einerseits, wenn sich jemand damit (oder im Beitrag) Bedankt und man kann auch sich irgendwo bedanken, ohne etwas dazu zu schreiben, weil es einem weitergeholfen hat oder man die Aussage gut fand.

Danke-Knopf-Drücke gezielt zu sammeln, ist aber irgendwie seltsam *schmunzelt*


----------

