Simulation - Anfänger braucht Hilfe

WhiteFang

Mitglied
Hallo Leute,
es ist mal wieder so weit, dass ich eure Hilfe brauche. Ich hab von meinem Mathelehrer, der immer noch fest daran glaubt, dass ich Simulationsprogramme schreiben kann, die Aufgabe (freiwillig) bekommen, mich mal wieder an einen Simulationsprogramm zu versuchen. Und wer will dann schon sagen müssen, dass er das nicht hin bekommt. Man sollte halt wissen, das mein Java-Programmier-Erfahrung leider auch schon ein Weilchen zurück liegt, also habt bitte etwas Verständnis dafür, dass ich vllt nicht so schnell mitkomme und eher mal was erklärt bekommen muss.

Nun zur Aufgabe, die aus dem Mathematik-Buch stammt und zu der ich ein Simulationsprogramm schreiben soll:

"Bei einem Skatspiel erhält jeder der drei Spieler 10 Karten, während die restlichen beiden Karten in den Skat gelegt werden.
  • Felix hat genau 2 Buben und 8 weitere Karten auf der Hand und hofft, dass genau ein weiterer Bube im Skat liegt. Welche Wahrscheinlichkeit besteht hierfür?
"

Mein Problem ist es nun, dass mir jegliche Idee fehlt, wie ich überhaupt ansetzen kann, oder was ich machen soll, geschweige denn, wie ich das realisieren soll. Kann mir bitte Jemand erklären, wie ich das lösen kann?

Gruß
WhiteFang

PS: Ich kann euch keinen Ansatz präsentieren, da ich von der Lösung keinen Schimmer habe.
 

Landei

Top Contributor
OK, zuerst einmal brauchst du die Karten nur nach "Bube" oder "Nicht-Bube" zu unterscheiden, also würde schon ein boolean zur Repräsentation reichen (Bube = true, Nicht-Bube = false). Die Verteilung der Karten für Felix ist klar: 2 Buben, 8 Nicht-Buben. Bleiben 22 Karten mit 2 Buben, die noch verteilt werden müssen.

Ich würde diese Rest-Karten in eine Liste packen. java.util.Collections hat schon eine Methode zum Mischen, nämlich shuffle. Nach dem Mischen schaust du einfach nach, ob unter den ersten beiden Karten ein oder zwei Buben sind. Das ganze Experiment wiederholst du vielleicht tausend mal und bildest die Mittelwerte (für einen oder zwei Buben) und gibst das Ergebnis aus.

Wie du siehst ist es wichtig, dir das Leben so einfach wie möglich zu machen. Also gar nicht erst mit 7,8,9,10 und so anfangen, wenn du es gar nicht brauchst. Und ob du die Karten 3-4-3 gibst, interressiert hier auch herzlich wenig.
 
Zuletzt bearbeitet:

WhiteFang

Mitglied
Na dann schon mal vielen Dank für deine schnelle Hilfe. Jetzt habe ich zumindest schon mal eine Idee davon, was ich machen muss und einen Schimmer davon, wie ich es umsetzen kann. Ich habe jetzt mal angefangen, obwohl ich zugeben muss, dass ich mit Listen und shuffle nie gearbeitet habe, da meine Java-Kenntnisse auf dem Informatikunterricht der 11 Klasse basieren. Ist der Ansatz so richtig? Ich brauche definitiv noch mehr Infos und Erklärungen dazu, wie es weiter geht... ;(

Java:
import java.util.Scanner;


public class skat {

	public static void main(String[] args) {
		
		int anzahlDerSimulationen;
		
		
		
// Augabe "Anzahl der Durchgänge?"
        System.out.println("Anzahl der Durchgänge?");
        
        // Eingabe der Anzahl
        Scanner get1;
        get1 = new Scanner (System.in);
        anzahlDerSimulationen = get1.nextInt();
		
        // Ausgabe der Anzahl der gewünschten Simulationen (Kontrolle)
        System.out.println("Es wird nun "+anzahlDerSimulationen+" mal simuliert.");
        
        // Erstellen der Liste
        boolean[] buben1 = new boolean[22];



   }

}
 

Michael...

Top Contributor
Felix hat genau 2 Buben und 8 weitere Karten auf der Hand und hofft, dass genau ein weiterer Bube im Skat liegt. Welche Wahrscheinlichkeit besteht hierfür?
Muss es denn wirklich eine Simulation sein bzw. schaut sich der Lehrer tätsächlich den Code an?
Die Wahrscheinlichkeit lasst sich ja schnell und einfach berechnen.
Man könnte ja das Programm kurz schlafen legen ain paar Fake ausgaben machen und dann einfach das Ergebnis der Berechnung ausgeben ;-)
 

WhiteFang

Mitglied
Muss es denn wirklich eine Simulation sein bzw. schaut sich der Lehrer tätsächlich den Code an?
Die Wahrscheinlichkeit lasst sich ja schnell und einfach berechnen.
Man könnte ja das Programm kurz schlafen legen ain paar Fake ausgaben machen und dann einfach das Ergebnis der Berechnung ausgeben ;-)

Du bist ja mal ein Fuchs... Also ehrlich gesagt, schaut er sich das vermutlich net an, weil das nur mal wieder eine seiner "speziellen" Ideen war, die er manchmal so hat.
Aber ich habe schon irgendwie den Ehrgeiz das wirklich hin zu bekommen, da ich ja auch wieder was daraus lernen kann. Nur alleine kann ich es halt nicht...
 
G

Gast2

Gast
Naja, Landei hat dir doch schon eine Mögliche Lösung gepostet.
Die kannst du jetzt schritt für schritt umsetzen. Zunächst brauchst du mal eine eigene Klasse Karte, die hat als einziges attribut einen boolean istBube.
In deiner Simulation erzeugst du dann einmal eine Liste mit 22 Karten (20 die kein Bube sind, 2 die Buben sind). Und dann shuffelst du x-mal und schaust nach jedem shuffle ob in den ersten beiden Karten genau ein Bube ist.
Als ergebnis hast du dann i-mal genau ein Bube unter den ersten zwei karten, j-mal nicht genau ein Bube unter den ersten zwei Karten.
Die Wahrscheinlichkeit ergibst sich dann einfach aus x/i.
 

Landei

Top Contributor
Liste füllen und mischen:
Java:
List<Boolean> karten = new ArrayList<Boolean>();
for(int i = 0; i < 22; i++) {
  karten.add(i < 2);
}
Collections.shuffle(karten);
 

WhiteFang

Mitglied
Super. Danke schon mal für eure Hilfe. So langsam komme ich wieder in die Materie rein...
Jetzt müsste ich nur noch wissen, wie ich die ersten beiden Plätze der Liste auslesen kann. Sry, dass ich so unfähig bin, aber damit habe ich noch nie zu tun gehabt...
Und wie kann ich ausschließen, dass beide Karten Buben sind, denn das darf ja auch net vorkommen.
So weit ist es bis jetzt voran gekommen:

Java:
public class skat {

	public static void main(String[] args) {
		
		int anzahlDerSimulationen;
		int anzahlBuben = 0;
		
		
		
        // Augabe "Anzahl der Durchgänge?"
        System.out.println("Anzahl der Durchgänge?");
        
        // Eingabe der Anzahl
        Scanner get1;
        get1 = new Scanner (System.in);
        anzahlDerSimulationen = get1.nextInt();
		
        // Ausgabe der Anzahl der Simulationen (Kontrolle)
        System.out.println("Es wird nun "+anzahlDerSimulationen+" mal simuliert.");
        
        // Erstellen der Liste und füllen mit Karten(shuffle)
     
        
            for (int a = 0; a < anzahlDerSimulationen; a++){
        	
        	List<Boolean> karten = new ArrayList<Boolean>();
            for(int i = 0; i < 22; i++) {
              karten.add(i < 2);
            }
            Collections.shuffle(karten);

            //Ausgabe der Kartenreihenfolge
            System.out.println("katen: "+karten+" .");
            
            //Soll die Buben zählen und in variable "anzahlBuben" summieren
            if(/*Listeneintrag1 = true*/){anzahlBuben++;}
            System.out.println("anzahl der Buben: "+anzahlBuben);
            
            if(/*Listeneintrag2 = true*/){anzahlBuben++;}
            System.out.println("anzahl der Buben: "+anzahlBuben);
            
            
        }
        
      
	}

}
 
G

Gast2

Gast
Code:
karten.get(0)
und
Code:
karten.get(1)
geben dir die ersten beiden karten
 

WhiteFang

Mitglied
Nur mal so zur Frage: Ich habe jetzt also die Werte (true/false) aus den ersten beiden Listeneinträgen ausgelesen und schreibe den Ersten in Boolean A und den Zweiten in Boolean B. Wieso funktioniert es nicht, wenn ich eine Bedingung schreibe, dass die Werte aus A oder B zur Bedingung gemacht werden können? Egal, ob es true oder false ist, wird einfach 1 zu anzahlBuben gezählt. Das soll aber doch nicht passieren, wenn es false ist... Wo ist hier der Wurm drinnen?

Java:
            boolean A = karten.get(0);
            System.out.println("Skat 1: "+A);
            
            boolean B = karten.get(1);
            System.out.println("Skat 2: "+B);
            
           if(A = true)
           {
        	anzahlBuben1++;
            System.out.println("anzahl der Buben: "+anzahlBuben1+" .");
            
            
           }
           
           else 
           {
        	   anzahlNichtBuben++;
        	   System.out.println("anzahl der NichtBuben: "+anzahlNichtBuben+" .");
        	   
           }
 

eRaaaa

Top Contributor
= -> Zuweisung
Was du suchst ist == ( if(A == true) ) oder noch einfacher if(A) bzw. besser if(a) und noch besser wären dann auch sprechende Namen ;>
 

WhiteFang

Mitglied
Also dann noch mal ein riesiges Danke! Ich habe mal wieder was für mein späteres Leben gelernt und ein wirklich nützliches Programm geschaffen. Jetzt nur noch eine Frage an alle Mathematiker unter euch:
Wie lautet denn das Korrekte Ergebnis der Aufgabe. Bei meiner Simulation kommen rund 18% raus. Kann das zutreffen?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Performance einer Monte-Carlo-Simulation verbessern Allgemeine Java-Themen 6
U JAVAFX Simulation Allgemeine Java-Themen 1
R Kerberos SSO in Java simulation. Allgemeine Java-Themen 1
N Ansatz Simulation Javascript Allgemeine Java-Themen 2
H 2D-Simulation in individuell gestalbarer Umgebung Allgemeine Java-Themen 20
G Simulation eines Tastendrucks Allgemeine Java-Themen 8
K Brauche Hilfe bei Simulation einer Flugkurve . Allgemeine Java-Themen 14
D Simulation eines Autorennens Allgemeine Java-Themen 3
D Java als anfänger Allgemeine Java-Themen 6
T Java-Anfänger möchte professionell coden lernen Allgemeine Java-Themen 23
D Anfänger versucht sich an Xtext Allgemeine Java-Themen 0
F Java die richtige Sprache? - Anfänger Allgemeine Java-Themen 3
J-Gallus Erste Schritte Wahrscheinlich Anfänger Fehler beim rechnen. Falsches Ergebnis. Allgemeine Java-Themen 9
J Ein blutiger Anfänger braucht Hilfe Allgemeine Java-Themen 7
M google plus java api - Anfänger sucht Hilfe Allgemeine Java-Themen 7
M Anfänger Java-Lehrmaterialien? Allgemeine Java-Themen 8
D Listen / Datenstrukturen und ein blutiger Anfänger Allgemeine Java-Themen 7
S Anfänger: 2 Objekte vergleichen? Allgemeine Java-Themen 8
G Was als fortgeschrittener Anfänger programmieren? Allgemeine Java-Themen 7
S Ganz übler Anfänger - Webseiten mit Java Allgemeine Java-Themen 3
L spezialfrage arraylist -_- anfänger Allgemeine Java-Themen 5
M Frage über Programm (IDE für Anfänger) Allgemeine Java-Themen 6
M <-- java anfänger hat klenes probleeeem :( Allgemeine Java-Themen 15
Robert Zenz Will mir jemand erklaeren wofuer man Module wirklich braucht? Allgemeine Java-Themen 38
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
S Selenium: WebDriverWait braucht zu lange Allgemeine Java-Themen 2
I JPQL query braucht zu lange Allgemeine Java-Themen 27
M Was braucht man, um einen Java Job zu bekommen? Allgemeine Java-Themen 8
R Test Umgebung für Datenbank erstellen, was braucht es? Allgemeine Java-Themen 14
Thallius Wie mache ich eine Java App mit Icon startbar die mehr Heap Speicher braucht? Allgemeine Java-Themen 3
Antoras Braucht ihr Datenmodellierung? Allgemeine Java-Themen 20
G RXTX library braucht sehr lange zum laden. Ist das normal? Allgemeine Java-Themen 8
B lookupPrintServices braucht eeeeeeeeeeeewig Allgemeine Java-Themen 3
V Eclipse braucht ewig zum Starten meines Codes Allgemeine Java-Themen 21
B Fehlermeldungen die keiner braucht ... Allgemeine Java-Themen 17
M file.delete() braucht ewig Allgemeine Java-Themen 3
H wie viel speicher braucht eigentlich ein array? Allgemeine Java-Themen 2
B Braucht man die neue VM 1.5 Allgemeine Java-Themen 3
P Welches JRE braucht meine Applikation? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben