Array erzeugen und anzeigen lassen
-
Hallo zusammen,
ich bin absoluter Neuling in Sachen C#-Programmierung und habe eine simple Frage an die Profis von euch.
Und zwar möchte ich mir einfach den Inhalt eines Arrays per Konsole anzeigen lassen.
Bsp:
int[] arr = new int[7];
Console.Writeline(arr);Wenn ich dann die Konsole starte, steht in der Konsole "System.Int32[]" und sonst nichts?
Wieso werden dort nicht der Reihe nach die Zahlen 0,1,2,3,4,5,6,7 angezeigt??
Grüße und danke
-
Das Problem bei
Console.Writeline(arr);
ist, dass du dabei nicht die einzelnen Elemente auf der Konsole ausgibst, sondern die von Arrays ueberladene ToString-Methode (falls du das nicht verstehst ist nicht so wichtig fuer den Moment).
Wenn du die einzelnen Elemente ausgeben moechtest, so muss du auf die einzelnen Elemente des Arrays zugreifen und diese mit Console.WriteLine(...) ausgeben.
Hier ein Beispiel:
int[] arr = new int[7]; // Array befuellen mit Zahlen von 1 bis 7 for (int i = 0; i < arr.Length; i++) arr[i] = i + 1; // Greife auf das i-te Element des Arrays zu und setze es auf i + 1 // 1. Variante for (int i = 0; i < arr.Length; i++) Console.WriteLine(arr[i]); // Lese das i-te Element des Arrays und gib es auf die Konsole aus // 2. Variante // Hier wird der Reihe nach deses Element von arr in der Variable // x gespeichert. Du kannst dann einfach x ausgeben foreach (var x in arr) Console.WriteLine(x);
Die 1. und die 2. Variante sind im Prinzip identisch. Es ist nur eine etwas andere Syntax.
-
Vielen Dank, jetzt verstehe ich die Funktionsweise!
Nun meine nächste Frage:
Ich möchte 5 unterschiedliche Zufallszahlen aus dem Bereich 1-8 (also:1,2,3,4,5,6,7,8) generieren und diese einem Array zuweisen und mir dieses dann in der Konsole ausgeben lassen.
Also:
Random Rnd1 = new Random(); // initialisiert die Zufallsklasse
int RndNr1 = Rnd.Next(1,8);
Console.WriteLine(RndNr1);
Random Rnd2 = new Random(); // initialisiert die Zufallsklasse
int RndNr2 = Rnd.Next(1,8);
Console.WriteLine(RndNr2);
Random Rnd3 = new Random(); // initialisiert die Zufallsklasse
int RndNr3 = Rnd.Next(1,8);
Console.WriteLine(RndNr3);
Random Rnd4 = new Random(); // initialisiert die Zufallsklasse
int RndNr4 = Rnd.Next(1,8);
Console.WriteLine(RndNr4);
Random Rnd5 = new Random(); // initialisiert die Zufallsklasse
int RndNr5 = Rnd.Next(1,8);
Console.WriteLine(RndNr5);int[] zahl = new int[5];
zahl[0] = RndNr1;
zahl[1] = RndNr2;
zahl[2] = RndNr3;
zahl[3] = RndNr4;
zahl[4] = RndNr5;
for (int i = 0; i < zahl.Length; i++)
Console.WriteLine(zahl[i]);Soweit so gut, Problem dabei ist, dass die generierten Zufallszahlen alle die gleichen sind? Wie bekomme ich es hin, dass sie sich unterscheiden und keinesfalls doppelt vorkommen?
-
Die Zufallszahlen kannst du dir so augeben:
Random rand = new Random(); // Nur ein einziges Random Objekt erzeugen for (int i = 0; i < 5; i++) Console.WriteLine(rand.Next(8) + 1);
Damit keine doppelt vorkommen musst doch etwas mehr Code schreiben. Probiers einfach mal
*Edit
Ach ja, ab jetzt bitte Code-Tags verwenden. Die findest du unterhalb der Smileys.
-
Und was ist bei dieser Schleife sozusagen die Variable, die ich den verschiedenen Array Positionen (also Zahl[0], Zahl[1]...) zu ordne? Quasi das RndNr1, RndNr2,..., aus meinem Beispiel, die dem Array dann im nächsten Schritt zuweise.
Ich brauche ja sozusagen ein 5 elementiges Array mit verschiedenen Zufallszahlen?
-
Stylistic schrieb:
Und was ist bei dieser Schleife sozusagen die Variable, die ich den verschiedenen Array Positionen (also Zahl[0], Zahl[1]...) zu ordne? Quasi das RndNr1, RndNr2,..., aus meinem Beispiel, die dem Array dann im nächsten Schritt zuweise.
Ich brauche ja sozusagen ein 5 elementiges Array mit verschiedenen Zufallszahlen?
Ich versteh ueberhaupt nicht was du meinst. Dein Ausdruck ist etwas schwierig zu verstehen.
Das Array mit den Zufallszahlen bekommst du doch durch die Loesung die dir icarus2 gegeben hat.
-
In meiner Lösung, die jedoch 5 gleiche Zufallszahlen erzeugt, habe ich 5 Variablen (RndNr1 etc.) die ich im 2. Schritt meiner Lösung dem Array zuordne.
In Icarus Lösung zeigt er mir zwar, wie ich unterschiedliche Zufallszahlen erzeuge, aber ich sehe dort keine Variable, die ich verwenden kann um diese Zahlen meinem Array zuzuordnen.
Letztendlich brauche ich ein Array, das aus 5 verschiedenen Zufallszahlen besteht.
-
Stylistic schrieb:
In meiner Lösung, die jedoch 5 gleiche Zufallszahlen erzeugt, habe ich 5 Variablen (RndNr1 etc.) die ich im 2. Schritt meiner Lösung dem Array zuordne.
In Icarus Lösung zeigt er mir zwar, wie ich unterschiedliche Zufallszahlen erzeuge, aber ich sehe dort keine Variable, die ich verwenden kann um diese Zahlen meinem Array zuzuordnen.
Letztendlich brauche ich ein Array, das aus 5 verschiedenen Zufallszahlen besteht.
int[] zahlen = new int[5]; Random rand = new Random(); // Nur ein einziges Random Objekt erzeugen for (int i = 0; i < zahlen.Length; i++) zahlen[i] = rand.next(9);
Darauf haettest du aber auch alleine kommen koennen
-
Bin gerade in einer Umgebung, wo ich kein Entwicklertool zur Verfügung habe, aber mich lässt dieses Problem nicht in Ruhe. Danke mal, werde es zu Hause direkt ausprobieren!!!
-
Cool, danke das hat funktioniert. Musste noch ein bisschen rumprobieren, weil "rand" mit System.Random irgendwie nicht klar kam. Aber es hat funktioniert.
-
Ich bin nun schon ein ganzes Stück weiter.
Mein nächstes Problem besteht darin, dass ich dieses "Zufallsarray" mit einem Array aus einer anderen Klasse vergleichen will.
Das andere Array ist auch ein 5 elementiges Array, und die 5 Elemente werden per Benutzereingabe generiert.
Ziel ist es, eine Rückgabe auf die Konsole zu erhalten, die anzeigt, "X Zahlen sind gleich und X Zahlen sind gleich und an der selben Stelle".
Ist es überhaupt möglich 2 Arrays aus verschiedenen Klassen miteinander zu vergleichen?
-
Natürlich kannst du das machen, baue dir 2 "counter" und prüfe in einem foreach oder for ob die nummern des einen arrays im andern enthalten sind, bzw. diese sogar an der selben stelle stehen, wenn ja, counter hochzählen.
-
Fuer das einfache Vergleichen kannst du auch
Enumerable.SequenceEqual verwenden.