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 9

    Der 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 0

    Die 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 Spalten

    Diese 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 Spalten

    Warum 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


Anmelden zum Antworten