Entwickler-Ecke

C# - Die Sprache - Noob-Help! Finde Fehler zu NullReferenceExeption nicht.


x3meblue - Fr 17.06.11 03:52
Titel: Noob-Help! Finde Fehler zu NullReferenceExeption nicht.
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



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();
        }
    }
}


jaenicke - Fr 17.06.11 04:41

Hallo und :welcome: im Forum!

user profile iconx3meblue hat folgendes geschrieben Zum zitierten Posting springen:

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. ;-)


x3meblue - 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:


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 - Sa 18.06.11 08:51

Ja, das sieht doch gleich viel besser aus. ;-)