Casino

Status
Nicht offen für weitere Antworten.

Malcolm

Mitglied
Ich habe folgendes Programm:

Code:
class Casino{ 

static int roll1W6(){
 
 int z;
 
 double r = Math.random();		
 z=((int)(r*7));
 }
 System.out.println("Sie haben folgende Zahl gewuerfelt: "+z); 

     
 return z;
}
	public static void main(String[] args)
	{
	
	roll1W6();
 	
	}
}

Es wird mir darin eine Zufallszahl zwischen 0 und 6 ausgegeben. Aber ich will das diese zwischen 1 und 6 liegt wie stelle ich da am besten an, was denkt ihr?

Gruß Malcolm
 

Malcolm

Mitglied
Sorry ich hab da ausversehen ne geschweifte Klammer eingefügt (in Zeile 9) die da nicht reingehört. Hab ich erst jetzt gesehen.
 

dieta

Top Contributor
Generiere zu erst eine Zufallszahl zwischen 0 und 5 (das dürfte ja kein Problem sein) und addiere dann zu dieser 1.
 

Malcolm

Mitglied
Okay brauche nochmal eure Hilfe ich habe mein programm weitergeführt, nach folgender Aufgabe:

a) Schreiben Sie in Java eine Methode roll1W6() mit der Signatur
static int roll1W6( ) ,
welche einen zuf¨alligen Wert zwischen 1 und 6 zur¨uckliefert.
b) Nutzen Sie roll1W6() um eine Methode roll2W6() mit der Signatur
static int roll2W6( )
zu schreiben, welche die Augensumme von zwei W¨urfelw¨urfen zur¨uckliefert.
c) Schreiben Sie eine Methode outcomeOfRoll() mit der Signatur
static int outcomeOfRoll( int roll ) ,
welche zu einem W¨urfelergebnis zwischen 2 und 12 den Gewinn in Euro zur¨uckliefert.
d) Nutzen Sie diese Methoden mit Hilfe eines Programmes herauszufinden, ob das Spiel
die Bank oder den Spieler bevorteilt. Simulieren Sie dazu 100.000 solcher Spiele und
summieren Sie den Gewinn bzw. Verlust jeder Runde. Wir sagen, das Spiel bevorteilt
den Spieler, wenn dieser nach den 100.000 Runden mit mehr Geld als vorher dasteht,
bzw. es bevorteilt die Bank, wenn der Spieler hinterher weniger Geld besitzt. Lassen
Sie sich das Ergebnis ausgeben.

Ich habe a) und b) folgendermaßen gelöst geht das auch oder kennt ihr einen besseren Weg?

Code:
class Casino{ 

static int roll1W6(){
 
 int x;
 
 double r = Math.random();		
 	x=((int)(r*6))+1;

 
 	System.out.println("Sie haben folgende Zahl gewuerfelt: "+x); 
 	return x;
}
static int roll2W6(){
int z;
 
 double r = Math.random();		
 	z=((int)(r*6))+1;

 
 	System.out.println("Sie haben folgende Zahl gewuerfelt: "+z); 
 	return z;
}


	public static void main(String[] args)
	{
	
	roll1W6();
 	roll2W6();
	}
}
 

Malcolm

Mitglied
Und wie kann ich später
Code:
roll1W6();
roll2W6();

auslesen um diese dann zu addieren?
 

Micha_S

Aktives Mitglied
Das ist ganz einfach

Code:
int Summe = roll1W6() + roll1W6();

Damit addierst du einfach die beiden return Ergebnisse deiner Würfel
 

Malcolm

Mitglied
Was mache ich hier falsch?
Ich denke mal das Problem liegt zwischen der Zeile 24 und 43. Aber ich weiss nur nicht was, kann ich das überhaupt so machen?

Code:
class Casino{ 

static int roll1W6(){
 
 int x;
 
 double r = Math.random();		
 	x=((int)(r*6))+1;

 
 	System.out.println("Sie haben folgende Zahl gewuerfelt: "+x); 
 	return x;
}
static int roll2W6(){
int z;
 
 double r = Math.random();		
 	z=((int)(r*6))+1;

 
 	System.out.println("Sie haben folgende Zahl gewuerfelt: "+z); 
 	return z;
}
static int outcomeOfRoll( int roll ){

int Summe = roll1W6() + roll1W6(); 
int Gewinn

switch (Gewinn){
case (Summe=2): case (Summe=3):case (Summe=4):case (Summe=5): 
	Auszahlung = 0;break;
case (Summe=6):case (Summe=7):case (Summe=8):case (Summe=9):
	Auszahlung = 1; break;
case (Summe=10):
	Auszahlung = 2; break;
case (Summe=11):
	Auszahlung = 4; break;
case (Summe=12):
	Auszahlung = 6; break;
}

System.out.println("Gewinn: "+Gewinn);
return Gewinn;


}

	public static void main(String[] args)
	{
	
	roll1W6();
 	roll2W6();
 	outcomeOfRoll();
	}
}
 

DocRandom

Top Contributor
..hmm, probiers eher mal so:
Code:
static int outcomeOfRoll( int roll){

	
	int Gewinn

	switch (roll) {
		case 6:
		case 7:
		case 8:
		case 9: 
			Gewinn = 1;
			break;
		
	   case 10:
		   Gewinn = 2; 
		   break;
	   
	   case 11:
		   Gewinn = 4;
		   break;
	   
	   case 12: 
		   Gewinn = 6;
		   break;
	   
	   default:
		   Gewinn = 0;
		   break;
	   
	}

	System.out.println("Gewinn: "+Gewinn);
	return Gewinn;
}

mfg
DocRandom
 

Malcolm

Mitglied
Danke Doc Random

bekomme aber jetzt folgende Fehlermeldung:

Code:
D:Casino.java:65: outcomeOfRoll(int) in Casino cannot be applied to ()

 outcomeOfRoll();

 ^

Code:
class Casino{ 

static int roll1W6(){
 
 int x;
 
 double r = Math.random();		
 	x=((int)(r*6))+1;

 
 	System.out.println("Sie haben folgende Zahl gewuerfelt: "+x); 
 	return x;
}
static int roll2W6(){
int z;
 
 double r = Math.random();		
 	z=((int)(r*6))+1;

 
 	System.out.println("Sie haben folgende Zahl gewuerfelt: "+z); 
 	return z;
}
static int outcomeOfRoll( int roll){ 

    
   int Gewinn; 

   switch (roll) { 
      case 6: 
      case 7: 
      case 8: 
      case 9: 
         Gewinn = 1; 
         break; 
       
      case 10: 
         Gewinn = 2; 
         break; 
       
      case 11: 
         Gewinn = 4; 
         break; 
       
      case 12: 
         Gewinn = 6; 
         break; 
       
      default: 
         Gewinn = 0; 
         break; 
       
   } 

   System.out.println("Gewinn: "+Gewinn); 
   return Gewinn; 
}
 
 
	public static void main(String[] args)
	{
	
	roll1W6();
 	roll2W6();
 outcomeOfRoll();
	}
}
 

DocRandom

Top Contributor
..nunja Du solltest der Routine outcomeOfRoll ja auch was mit geben, nähmlich die Augenzahl beider Würfe ;)
Einfach nur Cut&Paste funzt hier natürlich nicht!

Achja, damit ich meine Version fertig bekomme (ist sie ja im Prinzip) müßte ich wissen wieviel die Bank, also das Casino pro Wurf nimmt!

mfg
DocRandom
 

Malcolm

Mitglied
DocRandom hat gesagt.:
..nunja Du solltest der Routine outcomeOfRoll ja auch was mit geben, nähmlich die Augenzahl beider Würfe ;)
Einfach nur Cut&Paste funzt hier natürlich nicht!

Achja, damit ich meine Version fertig bekomme (ist sie ja im Prinzip) müßte ich wissen wieviel die Bank, also das Casino pro Wurf nimmt!

mfg
DocRandom

Also bei Augensumme

2,3,4,5 keine Auszahlung

bei Augensumme

6,7,8,9 einfache Auszahlung

bei Augensumme
10 doppelte A.

bei Augensumme

11 vierfach

und bei Augensumme

12 sechsfache


bei einem Einsatz von 1 €


Also soll ich unten eingeben in die Klammern von

static int outcomeOfRoll( int roll)

Augensumme? Richtig?
 

DocRandom

Top Contributor
Malcolm hat gesagt.:
Also soll ich unten eingeben in die Klammern von

static int outcomeOfRoll( int roll)

Augensumme? Richtig?
..nicht ganz, sondern in der Mainroutine mußt Du im Prinzip folgendes übergeben:
Code:
outcomeOfRoll(roll1W6()+roll2W6());

mfg
DocRandom
 

Malcolm

Mitglied
Bist echt der beste!!!!!!!!!
Danke

Jetzt hab ich immer noch ne Frage wieso bekomme ich 4 Würfel würfe angezeigt?
 

DocRandom

Top Contributor
..wenn Du es fertig hast, und es auch fehlerfrei läuft, dann poste nochmal den kompletten Code.
Ich stelle Dir dann auch meinen vor, der sich natürlich an Deinem bisherigen orientiert! ;)

mfg
DocRandom
 

Malcolm

Mitglied
Aufjedenfall

aber nicht so schnell
also für den letzten Punkt habe ich mir gedacht ich setze da ne Schleife an die die ganze Prozedur 100.000 durchlaufen lässt weiss aber nicht welche Schleife und wie genau!

Grüsse Malcolm
 

Malcolm

Mitglied
Gibt es ne spezielle Anweisung die sagt führe diese Rechnung genau 100.000 mal durch bzw. n-mal durch? und gib mir das gesamt ergebniss aus? :wink:
 

DocRandom

Top Contributor
Malcolm hat gesagt.:
Geht auch ne do while Schleife?
eher nicht oder?
geht auch, es geht auch eine while Schleife, aber am besten ist für diese Aufgabe eine for Schleife!

Code:
for (int runde = 0; runde < 100000; runde++) {

}

mfg
DocRandom
 

DocRandom

Top Contributor
Malcolm hat gesagt.:
Gibt es ne spezielle Anweisung die sagt führe diese Rechnung genau 100.000 mal durch bzw. n-mal durch? und gib mir das gesamt ergebniss aus? :wink:
Du mußt die jeweiligen Ergebnisse in der Schleife auswerten und dann den Gewinn/Verlust verbuchen!

mfg
DocRandom
 

Malcolm

Mitglied
DocRandom hat gesagt.:
Malcolm hat gesagt.:
Geht auch ne do while Schleife?
eher nicht oder?
geht auch, es geht auch eine while Schleife, aber am besten ist für diese Aufgabe eine for Schleife!

Code:
for (int runde = 0; runde < 100000; runde++) {

}

mfg
DocRandom

So hab ich es auch

Code:
for (int i=0; i<100001; i++) {}

Ich wollte es so machen erstmal

Code:
public static void main(String[] args)
	{
	
	
	outcomeOfRoll(roll1W6()+roll2W6());
	int p;
	
	for (int i=0; i<100001; i++)
	{
	p=(roll1W6()+roll2W6()) *i;
	}

	}
}

Aber das läuft schief (Denkfehler)
 

DocRandom

Top Contributor
..was willst auch den Schleifenindex zum Ergebnis dazu multiplizieren?

Also ich geb Dir mal ne Denkhilfe:
  • Schleife 100.000 mal durchlaufen
    [list:fdb964f028]° wurf1 + wurf2 merken
    ° auswerten
    ° Spieler/Bank Kapital erhöhen/reduzieren, je nachdem ob Spieler gewonnen hat.
[*]Schleifenende[/list:u:fdb964f028]

mfg
DocRandom
 

Malcolm

Mitglied
Code:
	int p;
	
	for (int i=0; i<100000; i++)
	{
	p=outcomeOfRoll(roll1W6()+roll2W6()) *i;
	   System.out.println(p); 

	}

Ist das so richtig? nein oder?
 

DocRandom

Top Contributor
..nein, weil was macht das *i in der Schleife?

Du multiplizierst ja dann i zum Wurfergebnis und das macht wenig sinn!

mfg
DocRandom
 

DocRandom

Top Contributor
..jup, kommt der Sache schon näher!

Code kommt aber noch nicht von mir, ich möchte das Du Dich etwas mehr anstrengst! *fg* ;)

(meine läuft schon lange und die Bank verliert fast immer!)

mfg
DocRandom
 

Malcolm

Mitglied
Code:
	for (int runde = 0; runde < 10; runde++) { 
	p= roll1W6()+roll2W6();
	 runde=+p;
 	 System.out.println(runde); 
}

Ist das ansatzweise richtig?
 

Malcolm

Mitglied
Wäre nett wenn du mir das Ergebnis sagen könntest, ich komm nicht mehr drauf
Bin müde und muss morgen um 6.15 aufstehen und zur Uni. Ich muss das meinem Prof morgen abgeben. Also wenn das okay für dich ist.
 

DocRandom

Top Contributor
..jein, ja und nein!
Da meine Frau schon etwas unwirsch wird und es mich auch ins Bett zieht, poste ich Dir meine Lösung!
Ich hoffe Du lernst was daraus!
Du mußt sie dennoch umschreiben, weil Dir Dein Lehrer ohnehin nicht glauben wird, das sie vin Dir stammt (die sind auch ned ganz dumm *lach*)
Mein Code besteht aus 3 Klassen in einem Package:
  • packgage Casino[list:31edb59f3c]
  • Wuerfel
  • Gewinn
  • Main
[/list:u:31edb59f3c]

nun der Code:Wuerfel.java
Code:
package casino;

public class Wuerfel {
	
	static int roll1W6() {
		return wurf();
	}
	static int roll2W6(){
		return wurf();
	}
	private static int wurf(){
		double r = Math.random();
		return (((int)(r*6))+1);
	}
}
Gewinn.java
Code:
package casino;

public class Gewinn {
	private long bank;
	private long player;
	
	public Gewinn() {
		bank = 100000;
		player = 100000;
	}
	static int outcomeOfRoll( int roll){
		int win;
		switch (roll) {
	      case 6:
	      case 7:
	      case 8:
	      case 9:
	         win = 1;
	         break;
	      
	      case 10:
	         win = 2;
	         break;
	      
	      case 11:
	         win = 4;
	         break;
	      
	      case 12:
	         win = 6;
	         break;
	      
	      default:
	         win = 0;
	         break;
	   } 
		return win;
	}
	public void playerWin(int win) {
		// Spieleinsatz buchen;
		--player;
		++bank;
		// gewinn/verlust verbuchen;
		player+= win;
		bank-= win;
	}
	public void bankWin(){
		++bank;
		--player;
	}
	public long getPlayerAnmount() {
		return player;
	}
	public long getBankAnmount() {
		return bank;
	}
}
Main.java
Code:
package casino;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Wuerfel w1 = new Wuerfel();
		Wuerfel w2 = w1;
		Gewinn gw = new Gewinn();
		int win = 0;
		
		System.out.println("Das Spiel wird nun gestartet und 100.000 mal durchgeführt!");
		System.out.println("Die Bank und der Spieler starten mit je 100.000€");
		for (int play = 0; play < 100000; play++) {
			int ergebnis = (w1.roll1W6() + w2.roll2W6());
			System.out.printf("Spiel %d : Augenzahl = %d \n", play+1, ergebnis);
			win = gw.outcomeOfRoll(ergebnis);
			if(win > 0) {
				System.out.printf("Spieler gewinnt %d€, Bank verliert %d€\n", win, win);
				gw.playerWin(win);
			} else {
				System.out.println("Spieler verliert 1€, Bank gewinnt 1€");
				gw.bankWin();
			}
		}
		System.out.println("Das Spiel ist beendet und führt zu folgendem Ergebnis:");
		System.out.println("Die Bank hat "+gw.getBankAnmount()+"€ auf Ihrem Konto.");
		System.out.println("Der Spieler hat "+gw.getPlayerAnmount()+"€ auf seinem Konto.");
	}	

}
..so das ist im Prinzip alles und war in 10 Minuten geschrieben! ;)

Ich hoffe Du kaufst Dir ein gutes Java-Buch oder liest mal die Insel!

Achja, solltest Du nen Fehler im Code finden und sei es nur ein Logigfehler, darfst Du auch diesen behalten! :p

mfg & gn8
DocRandom
 

Malcolm

Mitglied
VIELEN VIELEN VIELEN DANK

:toll:

Super nett wünsche dir auch ne gute Nacht!!!!



Liebe Grüsse Malcolm

P.S.: Hab mir schon nen paar Bücher gekauft Sprechen sie Java? und Java eine Insel. 2 teres war mir zu komplex! Hab mit dem ersten schon angefangen!
 
G

Guest

Gast
DocRandom hat gesagt.:
[/list][/list]

nun der Code:Wuerfel.java
Code:
package casino;

public class Wuerfel {
	
	static int roll1W6() {
		return wurf();
	}
	static int roll2W6(){
		return wurf();
	}
	private static int wurf(){
		double r = Math.random();
		return (((int)(r*6))+1);
	}
}
Gewinn.java
Code:
package casino;

public class Gewinn {
	private long bank;
	private long player;
	
	public Gewinn() {
		bank = 100000;
		player = 100000;
	}
	static int outcomeOfRoll( int roll){
		int win;
		switch (roll) {
	      case 6:
	      case 7:
	      case 8:
	      case 9:
	         win = 1;
	         break;
	      
	      case 10:
	         win = 2;
	         break;
	      
	      case 11:
	         win = 4;
	         break;
	      
	      case 12:
	         win = 6;
	         break;
	      
	      default:
	         win = 0;
	         break;
	   } 
		return win;
	}
	public void playerWin(int win) {
		// Spieleinsatz buchen;
		--player;
		++bank;
		// gewinn/verlust verbuchen;
		player+= win;
		bank-= win;
	}
	public void bankWin(){
		++bank;
		--player;
	}
	public long getPlayerAnmount() {
		return player;
	}
	public long getBankAnmount() {
		return bank;
	}
}
Main.java
Code:
package casino;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Wuerfel w1 = new Wuerfel();
		Wuerfel w2 = w1;
		Gewinn gw = new Gewinn();
		int win = 0;
		
		System.out.println("Das Spiel wird nun gestartet und 100.000 mal durchgeführt!");
		System.out.println("Die Bank und der Spieler starten mit je 100.000€");
		for (int play = 0; play < 100000; play++) {
			int ergebnis = (w1.roll1W6() + w2.roll2W6());
			System.out.printf("Spiel %d : Augenzahl = %d \n", play+1, ergebnis);
			win = gw.outcomeOfRoll(ergebnis);
			if(win > 0) {
				System.out.printf("Spieler gewinnt %d€, Bank verliert %d€\n", win, win);
				gw.playerWin(win);
			} else {
				System.out.println("Spieler verliert 1€, Bank gewinnt 1€");
				gw.bankWin();
			}
		}
		System.out.println("Das Spiel ist beendet und führt zu folgendem Ergebnis:");
		System.out.println("Die Bank hat "+gw.getBankAnmount()+"€ auf Ihrem Konto.");
		System.out.println("Der Spieler hat "+gw.getPlayerAnmount()+"€ auf seinem Konto.");
	}	

}

Wie schreibe ich all dies in ein Programm, damit es verbunden ist?
 
G

Guest

Gast
Ich hab mir das mal angeguckt und mich würde gerne interessieren wie das funktioniert. Wie würdest du das machen?
Damit das alles zusammen in einem editor ist und du noch nach eingibst

javac Casino.java

und dann nur noch

java Casino

und das ganze programm läuft
 

dercheffe

Aktives Mitglied
also ich, würde des so machen, dass ich jede klasse in eine datei speicher, die genauso heißt wie die klasse, nur mit .java hinten drann.
Da ich normalerweise aus meiner ide herraus kompeliere weiß ich nicht, ob javac automatisch alle abhängigen klassen mitkompiliert. einfach mal testen, und wenn nicht, dann jede klasse einzeln kompiliern.

dann dürfte auch "java casino" funktioniern
 
K

Katrin

Gast
dercheffe hat gesagt.:
also ich, würde des so machen, dass ich jede klasse in eine datei speicher, die genauso heißt wie die klasse, nur mit .java hinten drann.
Da ich normalerweise aus meiner ide herraus kompeliere weiß ich nicht, ob javac automatisch alle abhängigen klassen mitkompiliert. einfach mal testen, und wenn nicht, dann jede klasse einzeln kompiliern.

dann dürfte auch "java casino" funktioniern


Das habe ich schon probiert bei den ersten 2 Klassen klappt das wunderbar aber bei der letzten macht der compiler Probleme. Weil er bestimmte Befehle nicht kennt und ich vermute er versucht diese aus den vorhigen Klassen zu beziehen. :?:
Ich würde gerne wissen wie das Programm läuft, sieht ineteressant aus.

Gruß Katrin
 

dercheffe

Aktives Mitglied
Ok, könntest du die Fehlermeldung posten?

Ich hab grad festegestellt, dass die Main die Klasse ist, die das prog started, also musst du "java Main" machen.

Also einen Ordner "casino"
in dem steckt drinn "Wuerfel.java", "Gewinn.java" und "Main.java"
die müssen alle kompiliert werden mit javac, ob einzeln oder nicht weiß ich nicht. Dann muss in dem Ordner "Wuerfel.class", "Gewinn.class", "Main.class" vorhanden sein. Dies kannst du dann mit "java Main" starten.
 
G

Guest

Gast
Bekomme diese fehlermeldung
Code:
 javac Main.java
Main.java:9: cannot resolve symbol
symbol  : class Wuerfel
location: class casino.Main
      Wuerfel w1 = new Wuerfel();
      ^
Main.java:9: cannot resolve symbol
symbol  : class Wuerfel
location: class casino.Main
      Wuerfel w1 = new Wuerfel();
                       ^
Main.java:10: cannot resolve symbol
symbol  : class Wuerfel
location: class casino.Main
      Wuerfel w2 = w1;
      ^
Main.java:11: cannot resolve symbol
symbol  : class Gewinn
location: class casino.Main
      Gewinn gw = new Gewinn();
      ^
Main.java:11: cannot resolve symbol
symbol  : class Gewinn
location: class casino.Main
      Gewinn gw = new Gewinn();
                      ^


The system is out of resources.
Consult the following stack trace for details.
java.lang.OutOfMemoryError
/casino$
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben