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!
x3meblue hat folgendes geschrieben : |
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:
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? ;-)
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. ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!