Moin.
Bin ein c# Einsteiger und habe folgende Aufgabe als Übung durchgeführt:
Pseudozufallszahlen generieren, einen Würfel simulieren und ausgeben (mit % Angabe wie oft welches Auge gewürfelt wurde)
Habe es umsetzen können, würde jedoch das Programm erweitern, sodass der Nutzer
eingeben kann wie viele Würfel gewürfelt werden sollen.
Nun, da habe ich eine Lücke beim verstehen wie ich das verschachteln kann mittels Schleifen (zB for schleifen)?
Hier der Code für einen Würfel, mit n Würfen.
C#:
using System;
using System.Threading;
//..........
//.........
//Mir ist unklar, egal wie, bei der Verschachtelung der Schleifen
//Wie ich die ineinander zusammenführe..
//..das Abfangen für die Falscheingaben ist nicht im Code
//Obwohl gelöst, bringt aber nix
namespace ExcersiseMultiDices_JL
{
class DiceRoll
{
static void Main(string[] args)
{
//Fragt den Benutzer ab wie oft die Würfelsimulation..
Console.WriteLine("Wie oft soll gewürfelt werden ?");
int numberRepeats = int.Parse(Console.ReadLine());
/* Console.WriteLine("Bei wie vielen Würfeln ?");
int numberDice = int.Parse(Console.ReadLine()); */
var DiceRandomGenerate = new Random();
int[] Die = new int[7];
int z;
var resAndNumber = new int[6];
for (z = 1; z < numberRepeats; z++)
{
Die[DiceRandomGenerate.Next(1, 7)]++;
}
//..Den Würfel mittels for werfen soll,inkrementiert den Zähler
//Und erfasst die Ergebnisse im Array
for (int i = 0; i < numberRepeats; i++)
{
var rolledResult1 = DiceRandomGenerate.Next(1, 7);
resAndNumber[rolledResult1 - 1]++;
}
//Die folgende for-Schleife berechnet die..
//..Prozentzahl der im Array erfassten Würfe.
//Diese werden, gemeinsam mit der Anzahl wie oft ein Würfelauge vorkam, in der Konsole ausgegeben.
for (int i = 0; i < 6; i++)
{
double Percentage1 = 100.0 * resAndNumber[i] / numberRepeats;
Console.WriteLine("Würfelauge {0} vom 1. Würfel wurde {1} mal gewürfelt. ({2}%)", i + 1, resAndNumber[i], Percentage1); //Welchen Algorithmus für 1+ Würfeln?
}
//Nach dem Durchlaufende wird das Konsolenfenster offen gehalten, damit der Nutzer
//..Die Ausgabe betrachten und mit einem beliebigen Tastendruck beenden kann
Console.WriteLine("Beliebige Taste drücken um das Programm zu beenden.");
Console.ReadKey();
}
/* static int GenerateNumber(Random random)
{
return random.Next(1, 7);
}*/
}
}
Weiss.. ist eig. unkompliziert zu lösen, gerade blockt aber alles bei mir und man kommt nicht weiter. :S
--.--------.--------
-o_._o-
Hallo,
leider hast Du nicht genau beschrieben was Du willst.
Wenn Du einfach nur die einzelnen Würfel betrachten willst, brauchst Du nichts zu schachteln.
Dann reicht es, die Anzahl der Würfel mit der Anzahl Wiederholungen zu multiplizieren, weil es keinen Unterschied macht, bei welcher Wiederholung ein Würfel geworfen wurde.
Wenn Du die Summen der einzelnen Wiederholungen zählen willst, musst Du für zwei Dinge sorgen:1.Das Objekt (bei Dir das Array), in dem die Anzahl gespeichert wird, muss groß genug sein, um alle möglichen Summen aufnehmen zu können. Dann eignet sich statt einem Array ggf. besser ein Dictionary<int,int>. 1.Du musst dafür sorgen, dass für jede Wiederholung (äußere Schleife) soviele Würfe addiert werden, wie es Würfel gibt (innere Schleife).
Also sowas in der Art (nicht getestet):
var resAndNumber = new Dictionary<int,int>();
// für jede Wiederholung...
for (int i = 0; i < numberRepeats; i++)
{
// ...rolle Anzahl Würfel und addiere Ergebnisse
int rolledResult = 0;
for (int i = 0; i < numberDice; i++)
{
rolledResult1 += DiceRandomGenerate.Next(1, 7);
}
// wenn diese Summe noch nicht geworfen wurde, einen Eintag dafür im Dictionary anlegen
if(!resAndNumber.ContainsKey(rolledResult))
{
resAndNumber[rolledResult1] = 0;
}
// bisherige Anzahl für diese Summe hochzählen
resAndNumber[rolledResult1]++;
}
Bei der Ausgabe dann mit foreach
das ganze Dictionary durchlaufen (sechsmal reicht ja dann nicht mehr).
Finde ich übrigens sehr gut, dass Du als Einsteiger erst mal auf der Konsole arbeitest statt Dich direkt auf grafische Oberflächen zu stürzen 👍 (persönliche Meinung)
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
@MarsStein
Danke Marsianer. 😄
Werde es später genauer ansehen wenn ich die Zeit dazu hab.
Am liebsten jetzt. x)
Irgendwie wäre es, m. M. n., nicht sinnvoll sich eines schlechtes Verständnis als Anfänger anzueignen.
Deswegen die Entscheidung mal ganz klein zu beginnen.
--.--------.--------
-o_._o-
Wäre es nicht sinnvoller, erst mal die Grundlagen von C# komplett zu lernen?
Es gibt tolle Bücher! Ich will keine Werbung machen, aber schau dir mal von Andreas Kühnel 'C#6 mit Visual Studio 2015' an - das wirst du nie bereuen!
OO gibts seit Platon - hatte der auch C#?