Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 16

Thema: Problem: Nullpointerexecption

  1. #1
    Registrierter Benutzer
    Registriert seit
    27.12.2002
    Ort
    Augsburg
    Beiträge
    47

    Problem: Nullpointerexecption

    Sorry aber mir ist erstmal kein besserer Threadtitel eingefallen und zweitens ist das Problem wohl eh ganz leicht zu lösen:
    Ich hab 2 Javaklassen, die eine erbst von der andren. die Oberklasse hat aber gleichzeitig ein ArrayObjekt der Unterklasse als Bestandteil.

    Hier mal der Code:
    Code:
    package blatt3aufgabe3;
    
    public class Publikation extends Projekt {
        
        public String Titel, Inhalt, Datum;
        public Autor[] autor;
        
        /** Creates a new instance of Publikation */
        public Publikation(){}
        
        
        public Publikation(String titel, String inhalt, String datum) {
            this.Titel = titel; this.Inhalt = inhalt; this.Datum = datum;
        }
        
        public Publikation(String titel, String inhalt) {
            this.Titel = titel; this.Inhalt = inhalt; 
        }
        
        public Publikation(String titel) {
            this.Titel = titel;
        }
    
     public static void main(String[] args) {
            Publikation pub = new Publikation("Saudummertitel", "blablabla", "31.02.2005");
            pub.autor[0] = new Autor("Nachname", "Vorname", "1.1.1111");
        }
    }
    Und die Unterklasse davon:

    Code:
    package blatt3aufgabe3;
    
    /**
     *
     * @author martin
     */
    public class Autor extends Publikation {
        
        public String Name, Vorname, Geburtsdatum;
        
        /** Creates a new instance of Autor */
        
        public Autor(String name, String vorname, String geburtsdatum) {
            super();
            this.Name = name;
            this.Vorname = vorname;
            this.Geburtsdatum = geburtsdatum;
        }
        
        public String toString() {
            return new String("Name: "+this.Name+" Vorname: "+this.Vorname+" Geburtsdatum: "+this.Geburtsdatum);
        }
        
    }
    Wenn ich das ganze aber jetz versuche laufen zu lassen erhalte ich immer:
    Exception in thread "main" java.lang.NullPointerException
    at blatt3aufgabe3.Publikation.main(Publikation.java:4 1)
    Java Result: 1
    Das ist die zeile mit pub.autor[0] = ....

    Wen nich das Array weglasse und ein einzelnes Objekt nehme würde es gehen...
    Was hab ich falsch gemacht?

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von Reaper
    Wen nich das Array weglasse und ein einzelnes Objekt nehme würde es gehen...
    Was hab ich falsch gemacht?
    Das Array gibt es noch nicht

    D.h. es fehlt ein
    Code:
    new Autor[anzahl];
    Übrigens solltest du vielleicht nochmal über deine Ableitungshierachie nachdenken, ein Autor ist normalerweise keine Publikation

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Du musst erst ein Array der gewünschten Grösse anlegen.
    public Autor[] autor; ist nur erst eine Referenz (auch Pointer genannt falls dir das mehr sagt) - da ist noch kein Speicher reserviert für das Ding. Das musst du erst noch selber machen wie hier

    Hmm, zweiter.

    MfG Peschmä
    Geändert von peschmae (06-05-2005 um 18:51 Uhr)
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  4. #4
    Registrierter Benutzer
    Registriert seit
    27.12.2002
    Ort
    Augsburg
    Beiträge
    47
    Hmm OK. Pointer sagt mir was Hab an menchen Stellen nur etwas schwierigkeiten mit Java und der Objektorientierung... schon ewig nimmer gemacht.
    Aber da gehört eigentlich noch ein Array hinzu, das soll eine unendliche Größe haben, wie geht dann das?

    Die Hierarchie ist so gedacht weil eine Publikation mehrere Autoren hat.
    Soll die Implementierung eines UML Diagrams sein (langweiles info grundstudium zeug...): Autor (1 bis5) arbeitet an Publikation, Publ. referiert auf Publ. und Publ. gehört zu 1 Projekt.

    Hat jmd ne andre Idee wie man sowas aufbauen sollte?
    Geändert von Reaper (06-05-2005 um 20:09 Uhr)

  5. #5
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Zitat Zitat von Reaper
    Aber da gehört eigentlich noch ein Array hinzu, das soll eine unendliche Größe haben, wie geht dann das?
    Nö, nix da unendlich, das gibts nur in Mathematik. Ausser unendlich doof (nee, ich meine nicht dich )

    Arrays haben eine fixe Grösse die du am Anfang beim erstellen angeben musst. Container mit veränderbarer Grösse (quasi Unendlich falls du etwa 2*Unendlich viel Arbeitsspeicher hast) wäre z.B. die ArrayList
    Die verwendet intern Arrays und kopiert die Inhalte in ein neu angelegtes, grösseres um, wenn der Platz nicht mehr ausreicht.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von Reaper
    Die Hierarchie ist so gedacht weil eine Publikation mehrere Autoren hat.
    Das ist ja schön und gut, aber warum sollte ein Autor eine Publikation sein.
    Normalerweise sind Autoren Personen oder vielleicht noch Institutionen.

    Die Idee, dass ein Autor die Publikation seiner Eltern ist, dehnt den Begriff Publikation schon ziemlich.

    Ich hätte eher vermutete, daß ein Autor mehrere Publikationen haben kann, bzw. eine Publikation mehrere Autoren.

    Aber vielleicht steckt dahinter ja noch eine höherer Idee, die mir nicht zugänglich ist?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer
    Registriert seit
    27.12.2002
    Ort
    Augsburg
    Beiträge
    47
    Ich werd das Array vollstopfen bis /dev/urandom keine Zeichen mehr hergibt
    OK ich glaub ArrayList hab ich überlesen in meinem JAva Buch... kommt davon.
    In C ging das doch mit nem normalen Array wie PHP wenn ich mich richtig erinnere.
    Hab grad die Lösungen von der spaßigen Aufgabe gesehen... Vector...
    Aber war trotzdem gut zu Wissen.

    @anda_skoa: Ja war so gedacht daß eine Publikation mehrere Autoren haben soll. Das extends ist hier irgendwie echt total überflüssig, eine Klassenvariable sollte reichen.
    Geändert von Reaper (06-05-2005 um 22:22 Uhr)

  8. #8
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Zitat Zitat von Reaper
    In C ging das doch mit nem normalen Array wie PHP wenn ich mich richtig erinnere.
    Jein. In C kannst du die grösse von Arrays auch nicht ändern - eher sogar noch etwas weniger als bei Java (muss zur kompilierzeit konstant sein - zumindest bei statischen-globalen Arrays sogar noch bei C99 blabla )

    Aber wenn du den Speicherplatz mit malloc anforderst kannst du das dann natürlich mit realloc vergrössern/verkleinern (am Ende).

    Hab grad die Lösungen von der spaßigen Aufgabe gesehen... Vector...
    Aber war trotzdem gut zu Wissen.
    Vector ist auch ok. Macht dasselbe wie ArrayList - letztere ist nur etwas moderner (und implementiert das List-Interface, d.h. man kann sie einfach gegen eine LinkedList austauschen (wobei die fast immer langsamer ist - lohnt sich also nicht das zu machen)).

    Vector ist mittlerweile intern via eine ArrayList implementiert - also eigentlich overhead da das Ding zu benutzen und nicht direkt die ArrayList. Aber das ist ein Detail ;-)

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  9. #9
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Soweit ich weiß ist der wesentliche Unterschied zwischen Vector und ArrayList, daß die Methoden des Vector synchronized sind.


    Zitat Zitat von Reaper
    Das extends ist hier irgendwie echt total überflüssig, eine Klassenvariable sollte reichen.
    Seh ich auch so.
    Ableitung kann im ersten Augenblick einfach praktisch aussehen, aber ist dann fast immer zu einem späteren Zeitpunkt problematisch.
    Auch wenn das Projekt keine wichtige Sache ist, sollte man sich erst gar nicht angewöhnen so zu arbeiten

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  10. #10
    Registrierter Benutzer
    Registriert seit
    27.12.2002
    Ort
    Augsburg
    Beiträge
    47
    Was soll synchronized heißen?

    Hat die ArrayList dann irgendwelche Nachteile gegenüber Array, wenn man auch ein festes Array hernehmen könnte (außer daß es keine primitiven Datentypen aufnehmen kann)?

  11. #11
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von Reaper
    Was soll synchronized heißen?
    Das heißt, daß mehrere Threads mit dem Container arbeiten können, ohne ihn durcheinander zu bringen.
    D.h. aber auch, daß dabei zusätzlicher Overhead entsteht.
    Darum macht es ArrayList auch nicht mehr selbst.

    Hat die ArrayList dann irgendwelche Nachteile gegenüber Array, wenn man auch ein festes Array hernehmen könnte (außer daß es keine primitiven Datentypen aufnehmen kann)?
    Durch die zusätzliche Indirektion (Methodenaufruf) wird es langsamer, aber ich schätze das fällt erst bei sehr vielen Zugriffen auf.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  12. #12
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Soviel ich weiss ist synchronized in jedem Fall erheblich langsamer (Faktor 10 habe ich so im Kopf) auch wenn du gar nicht mit Threads arbeitest.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  13. #13
    Registrierter Benutzer
    Registriert seit
    27.12.2002
    Ort
    Augsburg
    Beiträge
    47
    Gut Danke.
    (Bestätigt meine Vermutung daß unser Prof. eigentlich in Java gar nicht fit ist... komplizierte umständliche Lösungen für einfache Sachen...)

    Achja noch was: ist es eigentlich sinnvoll get/set Methoden zu machen? Wenn man die Variable direkt ändern kann und keine Seiteneffekte auftreten sollen dann doch wohl nicht oder?
    Geändert von Reaper (07-05-2005 um 13:04 Uhr)

  14. #14
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Zitat Zitat von Reaper
    Achja noch was: ist es eigentlich sinnvoll get/set Methoden zu machen? Wenn man die Variable direkt ändern kann und keine Seiteneffekte auftreten sollen dann doch wohl nicht oder?
    Naja, wenn die Dinger eh public sind ists recht sinnlos. Aber generell würde ich schon get/set Methoden einer public-Membervariable bevorzugen.
    u.A. wegen der dort möglichen Sinnkontrollen von Methodenaufrufen (und wegen der Konsistenz halt dann auch für Variablen bei denen du keine Kontrollen machst/machen kannst)

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  15. #15
    Registrierter Benutzer
    Registriert seit
    27.12.2002
    Ort
    Augsburg
    Beiträge
    47
    Ich hoff ich nerv jetzt nicht zu sehr aber hab da noch ne Frage dazu:

    Wenn ich in eine ArrayListe jetzt beliebige Objekte Packe wie kann ich dann z.B. eine Liste aller Attribe "Name" dieser Objekte bekommen? Also es sind keine Strings, das wäre ja kein Großes Ding. Ich bekomm hier beim aufruf toString() oder direkt ausgegeben immer nur Objekt@Speicheradresse oder sowas in der Art.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •