C# Programm Zweidimensionales Array?
Moin,
sitze schon ne Weile an einem Programm, das einen Integer (nennen wir ihn Zahl ) vom Benutzer einlesen soll. Ausgehend von Zahl soll dann wie folgt ein zweidimensionales Array erstellt werden:
- das Array ist Zahl x Zahl groß
- das Element oben links im Array (also [0, 0] ) hat den Wert Zahl x Zahl
- jedes weitere Element rechts daneben hat jeweils -1 weniger
- anders beschrieben: es wird von links nach rechts abwärts gezählt beginnend vom Wert Zahl x Zahl
Da ich mir den Lösungsweg Stück für Stück erarbeiten möchte, könnt Ihr auf die komplette Lösung/ bzw. Erklärung verzichten.
Ich weiß, dass man Zeilen und Spalten bei dieser Aufgabe beide mit for-Schleifen erstellen kann, doch der Einfachheit halber möchte ich erst verstehen, wie ich mit den Spalten vorgehen muss.
Ohne for-Schleife bekomme ich die erste Spalte problemlos erstellt und das sieht dann so aus:
oder:
Console.WriteLine("Geben Sie eine Zahl ein, bei der nach dem"+ "Schema Zahl*Zahl ein Array erstellet werden soll:");
string eingabe = Console.ReadLine();
int intEingabe = Convert.ToInt32(eingabe);
Console.WriteLine("\n");
int[,] eingabeArray = new int[intEingabe,intEingabe];
int eingabeArrayLänge = intEingabe * intEingabe;
//Erste Spalte:
eingabeArray[0, 0] = eingabeArrayLänge;
eingabeArray[1, 0] = eingabeArray[0, 0] - 1;
eingabeArray[2, 0] = eingabeArray[1, 0] - 1;
Console.WriteLine(eingabeArray[0, 0] + "\n" + eingabeArray[1, 0] + "\n" + eingabeArray[2, 0]);
Bis dahin kein Problem doch wie schaffe ich es nun, dass ich die erste Spalte nicht "von Hand" ausfüllen muss? Das muss doch irgendwie mit ner for-Schleife zu machen sein?
Doch ich komme da nicht weiter - egal wie ich es drehe und wende.. Wäre nett wenn jemand mir die passende for-Schleife zeigen könnte.
LG
3 Antworten
Schau zum Beispiel mal hier, wie man in C# durch einen multidimensionalen Array iteriert: How do you loop through a multidimensional array?
Dann musst du es nicht von Hand ausfüllen.
Ist jetzt bewusst nicht in c#. Aber meinst du das so?
Nehmen wir mal 3 als Eingabe vom User. Wie soll dein Array dann am ende aussehen?
Wie gesagt- es soll doch 2dimensional sein: Zahl Zeilen x Zahl Spalten. Aber wie gesgat mir reicht erstmal wenn ich weiß, wie ich die erste Spalte erstelle
for(int i = 0;i < intEingabe;i++){ /*durch jede Zeile oder Spalte loopen*/
for(int a = 0;a < intEingabe;a++){ /*durch jede Spalte oder Zeile loopen*/
eingabeArray[i, a] = eingabeArray[i==0?i:i--, a==0?a:a--]--; /*eingabeArray[Zeile, Spalte] = eingabeArray[Zeile -1, Spalte-1]-1*/
}
}
Bin mir nicht sicher, kannst du aber mal probieren.
Der Code in länger und besser verstehbar:
for(int i = 0; i < intEingabe; i++){
for(int a = 0; a < intEingabe; a++){
int tempi;
int tempa;
if(i > 0){
tempi = i - 1;
}
if(a > 0){
tempa = a - 1;
}
eingabeArray[i, a] = eingabeArray[tempi, tempa] - 1;
}
}
Das mit den Fragezeichen ist quasi ein kurzes if. Z.B.:
int test = 0;
test == 0 ? /*Test ist gleich null*/ : /*Test ist nicht gleich null*/;
In lang-geschrieben währe das:
if(test == 0){
/*Test ist gleich null*/
}else {
/*Test ist nicht gleich null*/
}
Danke soweit. Visual Studio sagt aber, dass tempa und tempi nicht zugewiesen sind..
Und zwar an der Stelle
eingabeArray[i, a] = eingabeArray[tempi, tempa] - 1;
eingabeArray[i, a] = eingabeArray[tempi, tempa] - 1;
verursacht nun folgende Fehlermeldung:
System.IndexOutOfRangeException: "Index was outside the bounds of the array."
Verstehe NIX davon - ich muss wirklich erstmal nur wissen wie ich die Kontrollstrukturen die auf meinen Bildern abgebildet sind zu einer for-Schleife mache. Also lediglich wie ich die Spalten erstelle.. So ein Gewusel mit den Fragwzeichen etc. habe ich noch nie gesehen..
Ja - genau so. Bloß halt als zweidimensionales Array