Autor Beitrag
Ritzeratze
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101



BeitragVerfasst: Sa 26.10.13 01:54 
Moin,

wenn ich ein Array mit dem new Konstruktor erstelle, sind doch eigentlich die Arrayfelder automatisch mit 0 initialisiert, oder irre ich mich da?
Muss ich mit einer Schleife ersts alle Feldinhalte initialisieren?

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
    static void eingabe(double[] argArray)
    {
      for (int index = 0; index < argArray.Length; index++)
      {
        Console.Write("Bitte geben Sie die {0} Zahl ein !: ", index + 1);
        argArray[index] = Convert.ToDouble(Console.ReadLine());
      }

    }

    static void Main(string[] args)
    {
      double[] zahlenArray = new double[5];

      eingabe(zahlenArray);
    }

Gruss Ritze

Moderiert von user profile iconTh69: Code- durch C#-Tags ersetzt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 26.10.13 11:12 
Hallo,

ja, beim Erstellen eines Arrays werden alle Arrayfelder automatisch mit dem Defaultwert initialisiert (d.h. bei Wertetypen 0 [bzw. deren Äquivalent, z.B. bei double 0.0 und bei bool false] und bei Referenztypen null).
Hast du denn eine andere Beobachtung gemacht (denn schließlich kannst du das ja einfach mit dem Debugger oder einer eigenen Schleife überprüfen)?
Ritzeratze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101



BeitragVerfasst: Sa 26.10.13 13:49 
Moin Th69,

es scheint so , das die Felder im übergebenden Array keine Werte aufnehmen.
In der Eingabe routine werden keine Werte gespeichert.

Gruss Ritze
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 26.10.13 15:15 
Ich vermute mal du erwartest, dass die danach in zahlenArray stehen, aber das ist nicht so. Du übergibst an eingabe die Werte als Kopie, aber keine Referenz auf das ursprüngliche Array. Dementsprechend werden die Werte in eingabe in diese Kopie geschrieben, das ursprüngliche Array hat damit aber nichts zu tun.

Wenn du das dort hineingeschrieben haben möchtest, musst du eine Referenz übergeben. Das ist wie mit einer Notizkladde. Du kannst dort etwas hineinschreiben und dann jemandem eine Kopie geben, du kannst aber auch die Originalkladde weitergeben, damit du danach selbst hast was hineingeschrieben wurde.

In C# geht das mit dem Schlüsselwort ref:
msdn.microsoft.com/d...akc2c7(v=vs.90).aspx
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 26.10.13 15:39 
Hallo jaenicke,

Arrays sind in C# aber stets Referenztypen, d.h. die Arrayfelder können in der aufgerufenen Methode verändert werden. ref bzw. out benötigt man nur, wenn man innerhalb der Methode ein neues Array anlegen und zurückgeben will.

Und Ritzeratze, was stellst du denn nach der Eingabe-Methode mit dem Array an?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Sa 26.10.13 15:42 
@jaenicke: In c# werden Arrays per Referenz übergeben. In dem gezeigten Code sollte nach dem Aufruf von eingabe auch die Werte in Zahlenarray stehen. Zumindest der gezeigte Code enthält für mich keinen Fehler.
Ritzeratze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101



BeitragVerfasst: Sa 26.10.13 17:02 
Moin,

na genauso wie im Beispiel habe ich es auch in dem von mir zu entwerfenden Programm gebaut. Allerdings habe ich da noch ein Haken drin. Laut Debugger wird was in die Felder geschrieben, wenn ich es ausgeben will, steht aber nichts mehr drin.

Wenn jemand Interesse hat, kann ich das Prg gern mal per pn schicken.

Gruss
Ritze
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 26.10.13 18:35 
Dann ist wohl dein Ausgabe-Code fehlerhaft. Wie sieht er denn aus?

Edit: per PN habe ich den Code zugeschickt bekommen.

Die Methode Anzeigen wird aufgerufen und gibt auch die Werte korrekt aus - leider sieht man sie nicht, da sofort wieder ins Hauptmenü gesprungen wird, welcher in der Design-Methode den Konsoleninhalt löscht. ;-)

@Ritzeratze: füge einfach am Ende dieser Methode (wie bei der Einlesen-Methode) ein Console.ReadKey() o.ä. hinzu.

Fazit: soviel "Lärm" um nichts ;-)