Mehrdimensionale Array. Kann mir das Ergebnis nicht erklären.
-
Hallo Leute,
bin mit der Weile bei Arrays angelangt und kann mir die Ausgabe bei diesem Beispielprogramm nicht ganz erklären.
Vielleicht könnt ihr mir das mit einfachen Worten näher bringen.
[cli]/*############################################################################# Mehrdimensionale Array ##############################################################################*/ #include "stdafx.h" using namespace System; int main(array<System::String ^> ^args) { // ein Array mit 2 Dimensionen und direkter Zuweisung array <Int32, 2> ^array1 = {{3, 5, 7, 6}, {2, 1, 0, 9}}; // noch ein Array mit 2 Dimensionen array <Int32, 2> ^array2; array2 = gcnew array <Int32, 2> (3, 3); // die Daten im ersten Array ausgeben for each (Int32 element in array1) Console::WriteLine("Der Wert ist {0}",element); Console::WriteLine(); // einem Element im zweiten Array einen Wert zuweisen array2[1, 1] = 10; // die Daten im zweiten Array ausgeben for each (Int32 element in array2) Console::WriteLine("Der Wert ist {0}",element); Console::Read(); return 0; } //#############################################################################
Die Ausgabe sieht so aus:
Der Wert ist 3
Der Wert ist 5
Der Wert ist 7
Der Wert ist 6
Der Wert ist 2
Der Wert ist 1
Der Wert ist 0
Der Wert ist 9Der Wert ist 0
Der Wert ist 0
Der Wert ist 0
Der Wert ist 0
Der Wert ist 10
Der Wert ist 0
Der Wert ist 0
Der Wert ist 0
Der Wert ist 0Die Obere Ausgabe mit den Zahlen ist verständlich. Die Zweite macht mir Kopfzerbrechen. Das muß die Ausgabe für array2 sein. Dieses Array nimmt auf jeder Ebene nur drei Element auf z. B. 3, 4, 5 für die erste Ebene und z. B. 6, 5, 3 für die zweite Ebene. Plus eine mehr, weil diese Variante der Ausgabe die wirkliche Anzahl + 1 ausgibt. Die zehn steht also im richtigen Feld, aber warum gibt das Programm drei "extra Nullen" am Ende aus? Es hat doch nur den Wert <Int, 2> (3, 3)?.
Lieben Dank für Eure Antwort
champmann
-
Das ist ein 3*3-Array, hat also 9 Elemente, wovon ein Element den Wert 10 hat und die anderen 8 den Wert 0. Ich weiß jetzt nicht, was genau daran unerwartet ist; ich versteh auch nicht deine Mutmaßungen über die Anzahl der Ebenen oder dass da irgendwas +1 ausgegeben würde.
-
Wieso 3 * 3?
Das erste Array hat folgende Angaben:
array <Int32, 2> ^array1 = {{3, 5, 7, 6}, // vereinfacht ausgesagt
{2, 1, 0, 9}}; // zwei Zeilen und vier SpaltenDiese Bemerkung für mein Verständnis.
Das zweite Array:
array <Int32, 2> ^array2; // Wieder in Spalten und Zeilen
array2 = gcnew array <Int32, 2> (3, 3); // Zwei Zeilen und drei SpaltenWarum hier 3 * 3 bei der Ausgabe?
Danke
champman
-
array2 = gcnew array <Int32, 2> (3, 3); // Zwei Zeilen und drei Spalten
Was bedeutet das
(3, 3)
deiner Meinung nach?
-
Wenn ich so ein Array jetzt in eine Tabelle ausdrücke, dann würde es für mich heißen:
Drei Spalten und Zwei Zeilen
<Int32,2> würde demnach Integer für zwei Zeilen sein
(3, 3) die Spaltenanzahl jeder einzelnen Zeile.So stelle ich mir das Bildlich gesehen vor. Allerdings kann das ja auch falsch sein so zu denken.
champmann
-
<Int32,2> würde demnach Integer für zwei Zeilen sein
(3, 3) die Spaltenanzahl jeder einzelnen Zeile.Die 2 steht für die Anzahl der Dimensionen. 3, 3 steht für die Größen der beiden Dimensionen.
-
Also eher ein Dreidimensionales Array?
champmann
-
Nein.
Anzahl der Dimensionen: 2 = Rechteck
Größe der einen Dimension: 3 = Rechteck wird in drei Zeilen eingeteilt
Größe der anderen Dimension: 3 = Rechteck wird in drei Spalten eingeteilt= 3*3 = 9 Felder, die Anzahl der Zeilen und Spalten haben nichts mit der Dimensionalität zu tun.
Ein dreidimensionales Array würde einem Quader entsprechen den du unterteilst.
MfG SideWinder
-
OK!!
Glaube das jetzt verstanden zu haben. Ansonsten frage ich noch mal.Lieben Dank
champmann