Autor Beitrag
x3meblue
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Fr 17.06.11 03:52 
Hallo!

Habe erst vor kurzem mit dem Programmieren angefangen und check jetzt grad gar nicht
wo hier der Fehler liegt.
Mach ich irgendwas mit den Arrays falsch? Kann man überhaupt
Objekte in Arrays packen? Komplettes Project ist im Anhang.

Viele Grüße, x3meblue


ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PersonenDatenbank
{
    public class BearbeitePerson
    {
        private Person person = new Person();
        private Person[] arrPerson = new Person[50];

        private int personenZähler = 0;
         
        public Person NeuePersonAnlegen()
        {
            Console.WriteLine("ANLEGEN EINER NEUEN PERSON\n");
            
            Console.Write("Vorname : ");
            person.Vorname = Console.ReadLine();
            Console.Write("Nachname: ");
            person.Nachname = Console.ReadLine();
            Console.Write("Alter   : ");
            person.Alter = Convert.ToInt16(Console.ReadLine());

            ++personenZähler;
            arrPerson[personenZähler] = person;

           Console.Clear();

           return person; 
        }

        public void BekanntePersonBearbeiten()
        {
            Console.WriteLine("BEARBEITEN EINER VORHANDENEN PERSON\n");

            Console.Write("Welche Person bearbeiten? Nachname: ");
            string nachname = Console.ReadLine();

            for (int i = 0; i < personenZähler; i++)
            {
                if (arrPerson[i].Nachname == nachname)
                {
                    person = arrPerson[i];
                }
            }

            Console.Write("aktuellen Vornamen: {0} ändern in: ", person.Vorname);
            person.Vorname = Console.ReadLine();
            Console.Write("aktuellen Nachnamen: {0} ändern in: ", person.Nachname);
            person.Nachname = Console.ReadLine();
            Console.Write("aktuelles Alter: {0} ändern in: ", person.Alter);
            person.Alter = Convert.ToInt16(Console.ReadLine());
            
            Console.Clear();
        }

        public void PersonAnzeigen()
        {
            Console.WriteLine("ANZEIGEN DER PERSONENDATEN\n");

            Console.Write("Welche Person anzeigen? Nachname: ");
            string nachname = Console.ReadLine();
            
            int j = 0;

            for (int i = 0; i <= personenZähler; i++)
            {
                string checkPerson;
                checkPerson = arrPerson[j].Nachname;

                if (personenZähler == 0 || i == personenZähler + 1)
                {
                    Console.Write("\n\nPerson konnte nicht gefunden werden! (Return drücken)");
                    Console.ReadLine();
                    Console.Clear();
                    return;
                }                    
                else if (nachname == checkPerson)
                {
                    person = arrPerson[j];
                }
                j++;
            }

            Console.WriteLine("Name    : {0} {1}", person.Vorname, person.Nachname);
            Console.WriteLine("Vorname : {0}", person.Vorname);
            Console.WriteLine("Nachname: {0} ", person.Nachname);
            Console.WriteLine("Alter   : {0}", person.Alter);
            Console.Write("\n\nZum Fortfahren Return-Taste drücken");
            
            Console.ReadLine();
            Console.Clear();
        }
    }
}
Einloggen, um Attachments anzusehen!
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: Fr 17.06.11 04:41 
Hallo und :welcome: im Forum!

user profile iconx3meblue hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
        private int personenZähler = 0;
         
        public Person NeuePersonAnlegen()
        {
            Console.WriteLine("ANLEGEN EINER NEUEN PERSON\n");
            
            Console.Write("Vorname : ");
            person.Vorname = Console.ReadLine();
            Console.Write("Nachname: ");
            person.Nachname = Console.ReadLine();
            Console.Write("Alter   : ");
            person.Alter = Convert.ToInt16(Console.ReadLine());

            ++personenZähler;
            arrPerson[personenZähler] = person;
Du erhöhst den Zähler zuerst und setzt dann die Person in das Array. Das heißt du lässt den ersten Eintrag des Arrays an Position 0 frei. Das siehst du aber auch sofort im Debugger, wenn die Exception auftritt:

ArrayNullEntry

Du hast aber noch ganz andere Probleme. ;-)
  • Du gehst z.B. bei der Suche einfach das ganze Array durch, egal ob ein Eintrag zugewiesen ist oder nicht.
  • Hier merkst du die Nachteile eines festen Arrays. Nimm besser eine Liste. ;-)
  • Du erstellst nie eine weitere Instanz einer Person. Das heißt du hast nur ein Objekt, das du mehrfach in das Array hinzufügst. Und dieses Objekt hat immer die zuletzt eingegebenen Daten.
    Du musst beim Hinzufügen einer neuen Person auch mit new ein neues Objekt erstellen. Am besten lass das mit der globalen Variable person weg, die kannst du auch in die einzelnen Funktionen packen.
  • Du gehst bei der Suche davon aus, dass immer ein Eintrag gefunden wird. Was, wenn nicht? ;-)
Einloggen, um Attachments anzusehen!
x3meblue Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Fr 17.06.11 21:20 
Moin, moin!

Ja, habe jetzt gesehen, dass ich ganz falsch daran gegangen bin.
Habe gedacht, dass man neue Instanzen/Objekte zur Laufzeit generieren
kann bzw. war mir das mit den Referenztypen nicht ganz klar.
Hab mich jetztmal mit den Listen beschäftigt und glaube das hier löst mein
Problem, so wie ich mir das vorgestellt habe:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
class Program
    {
        static void Main(string[] args)
        {
            List<Person> personen = new List<Person>();

            personen.Add(new Person("Tobia""Mustername"));
            personen.Add(new Person("Helga""Musterfrau"));
            personen.Add(new Person("Max""Mustermann"));

            foreach (Person per in personen)
            {
                Console.WriteLine("{0} {1}", per.vorname, per.name);
            }


            Console.ReadLine();
        }
    }

    class Person
    {
        public string name;
        public string vorname;

        public Person()
        { }

        public Person(string vorname, string name)
        {
            this.name = name;
            this.vorname = vorname;
        }
    }



Grüße, x3meblue
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 18.06.11 08:51 
Ja, das sieht doch gleich viel besser aus. ;-)