Problem mit Enumeration

Flo123

Mitglied
Hallo Leute! Ich wollte fragen, ob mir jemand bei einem Problem helfe kann. Folgends: Wir müssen im Rahmen eines Progr. Praktikums ein Java Programm schreiben, dass den Bestand von Artikeln verwalten kann. Ich bin auch schon fast fertig damit. Das Problem ist nun, dass jeder Artikel von einem bestimmten Typ sein soll (333, 555 und 777). Das sollen wir mit einer enum Klasse lösen. Die Bestände werden in in Array Liste gespeichert und in einer einer Tabelle über die Console ausgegeben mit Gewicht, Preis, Artikelnummer und dem entsprechenden TYP (also 333, 555 und 777).
Nun wollte ich wissen wie es es hinbekomme, dass für jeden Artikel der entsprechende Typ in der Tabelle angezeigt wird.
Das Programm setzt sich folgendermaßen zusammen:

- Klasse Verwaltungseinheit
- abstrakte Klasse Bestand
- enum Klasse Goldtyp
- Klasse Ring
- Klasse Halskette
- Klasse Goldartikel

Ich liste die Quelltexte der einzelnen Klassen mal auf. Vielleicht findet ihr den Fehler und könnt mir helfen. Ich habe den Quelltext der Verwaltungsklasse gekürzt. Nun werden nur noch die Goldartikel angezeigt. Die Klasse Kunde hab ich ganz weggelassen.



Verwaltungsklasse:
-----------------

[JAVA=42]
import java.util.Collections;
import java.util.Enumeration;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.Serializable;
import java.io.FileReader;
import java.util.Iterator;
import java.util.ArrayList;
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.IOException;
import de.htw.saarland.stl.Stdin;

public class Verwaltungseinheit implements Serializable
{
private ArrayList <Kunde> kundenListe;
private ArrayList <Bestand> bestandListe;

final static int FELDLAENGE = 14;

/**
* Konstruktor fuer Objekte der Klasse Verwaltungseinheit
*/

public Verwaltungseinheit()
{
kundenListe = new ArrayList <Kunde>();
bestandListe = new ArrayList <Bestand>();
}

/**
* Testdaten für Die Bestands- und Kundenverwaltung.
*/

public void initData()
{

Goldartikel g1 = new Goldartikel(10, 1, 50, Goldtyp.A);
Goldartikel g2 = new Goldartikel(12, 1, 60, Goldtyp.B);
Goldartikel g3 = new Goldartikel(9, 1, 100, Goldtyp.A);
Goldartikel g4 = new Goldartikel(4, 1, 300, Goldtyp.B);



bestandListe.add(g1);
bestandListe.add(g2);
bestandListe.add(g3);
bestandListe.add(g4);


}

private void saveDataToXML() throws IOException
{
XMLEncoder o = new XMLEncoder(new FileOutputStream("Softwareprojekt.xml"));
o.writeObject("Softwareprojekt");
o.writeObject(this);
o.close();
}

public Object loadDataFromXML() throws IOException
{
XMLDecoder o = new XMLDecoder(new FileInputStream("Softwareprojekt.xml"));
o.readObject();
Object obj = o.readObject();
o.close();
return obj;
}

private void save()
{
try
{
saveDataToXML();
}
catch(java.io.IOException ioe)
{
ioe.printStackTrace();
}
}

private void load()
{
try
{
Verwaltungseinheit v = (Verwaltungseinheit) loadDataFromXML();
v.mainMenue();
}
catch(java.io.IOException ioe)
{
ioe.printStackTrace();
}
}

private void exit()
{
System.exit(0);
}

public ArrayList getKundenListe()
{
return this.kundenListe;
}

public void setKundenListe(ArrayList liste)
{
this.kundenListe = liste;
}

public ArrayList getBestandListe()
{
return this.bestandListe;
}

public void setBestandListe(ArrayList liste)
{
this.bestandListe = liste;
}

private void mainMenue()
{
char eingabe;

do
{
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println(" ################################################################## ");
System.out.println(" # # ");
System.out.println(" # WILKOMMEN IM GOLD-AN-UND-VERKAUF PROGRAMM!!! # ");
System.out.println(" # # ");
System.out.println(" # ZUR ZEIT BEFINDEN SIE SICH IM HAUPTMENUE. # ");
System.out.println(" # BITTE WAEHLEN SIE DEN GEUENSCHTEN MENUEPUNKT DURCH EINGABE DER # ");
System.out.println(" # ENTSPRECHENDEN ZIFFER! # ");
System.out.println(" # ZUM VERLASSEN DES PROGRAMMS WaeHLEN SIE BITTE 'e'. # ");
System.out.println(" # # ");
System.out.println(" ################################################################## ");
System.out.println();
System.out.println();
System.out.println(" *********************** ");
System.out.println(" * H A U P T M E N U E * ");
System.out.println(" *********************** ");
System.out.println();
System.out.println(" ****************************** ");
System.out.println(" * [1] BESTANDSVERWALTUNG * ");
System.out.println(" * * ");
System.out.println(" * [2] KUNENVERWALTUNG * ");
System.out.println(" * * ");
System.out.println(" * [3] DATENVERWALTUNG * ");
System.out.println(" * * ");
System.out.println(" * [e] EXIT * ");
System.out.println(" ****************************** ");
System.out.println();
System.out.println();

System.out.print("MENUEPUNKT AUSWAEHLEN UND MIT 'ENTER' BESTAETIGEN!\n");
eingabe = Stdin.readlnChar("MENUEPUNKT:");

switch (eingabe)
{
case 'e': System.out.println("DAS PROGRAMM WURDE BEENDET! BITTE FENSTER SCHLIEßEN!");
exit();

case '2': kundenverwaltung();
break;
case '3': datenverwaltung();
break;
default: System.out.print("MENUEPUNKT NICHT VORHANDEN! BITTE WAEHLEN SIE EINEN DER AUFGEFUEHRTEN MENUEPUNKTE!\n");
}
} while (true);
}

private void bestandsverwaltung()
{
char eingabe;
boolean menuewechsel = false;
do
{
System.out.println();
System.out.println("WILKOMMEN IN DER BESTANDVERWALTUNG!");
System.out.println("SIE KOENNEN SICH IHRE BESTaeNDE ANSEHEN SOWIE AENERUNGEN AN IHNEN VORNEHMEN.");
System.out.println();
System.out.println(" ***************************************");
System.out.println(" * B E S T A N S D V E R W A L T U N G *");
System.out.println(" ***************************************");
System.out.println(" ****************************************************************************");
System.out.println(" * [1] ANEZIGEN ALLER GOLDARTIKEL [6] VERKAUFPREIS BERECHNUNG *");
System.out.println(" * *");
System.out.println(" * [2] ANZEIGEN ALLER HALSKETTEN [7] VERKAUFE ARTIKEL *");
System.out.println(" * *");
System.out.println(" * [3] ANZEIGEN ALLER RINGE [8] ARTIKEL SUCHEN *");
System.out.println(" * *");
System.out.println(" * [4] ANZEIGEN DES GESAMTEN BESTANDS [9] ARTIKEL HINZUFUEGEN *");
System.out.println(" * *");
System.out.println(" * [5] ARTIKEL ANKAUFEN [z] ZURUECK *");
System.out.println(" ****************************************************************************");
System.out.println();
System.out.println();

System.out.print("MENUEPUNKT AUSWAEHLEN UND MIT 'ENTER' BESTAETIGEN!\n");
eingabe = Stdin.readlnChar("MENUEPUNKT:");

switch(eingabe)
{

case 'z': menuewechsel = true;
break;
case '1': getGoldartikelBestand();
break;

default: System.out.print("MENUEPUNKT NICHT VORHANDEN! BITTE WAEHLEN SIE EINEN DER AUFGEFUEHRTEN MENUEPUNKTE!\n");
}
}while(!menuewechsel);
}

private void datenverwaltung()
{
char eingabe;
boolean menuewechsel = false;
do
{
System.out.println();
System.out.println(" *********************************");
System.out.println(" * D A T E N V E R W A L T U N G *");
System.out.println(" *********************************");
System.out.println();
System.out.println(" *************************************");
System.out.println(" * [1] LADE DATEN AUS XML-DATEI *");
System.out.println(" * *");
System.out.println(" * [2] SPEICHERE DATEN IN XML-DATEI *");
System.out.println(" * *");
System.out.println(" * [z] ZURUECK ZUM HAUPTMENUE *");
System.out.println(" *************************************");
System.out.println();

System.out.print("MENUEPUNKT AUSWAEHLEN UND MIT 'ENTER' BESTSETIGEN!\n");
eingabe = Stdin.readlnChar("MENUEPUNKT:");

switch(eingabe)
{
case 'z': menuewechsel = true;
break;
case '1': load();
break;
case '2': save();
break;
default: System.out.print("MENUEPUNKT NICHT VORHANDEN! BITTE WAEHLEN SIE EINEN DER AUFGEFUEHRTEN MENUEPUNKTE!\n");
}
}while (!menuewechsel);
}





public void getGoldartikelBestand()
{
String s;

System.out.println("GOLDARTIKELBESTAND [ARTIKELART 1]");
System.out.println("*********************************");
System.out.println("");
System.out.println("");
printZentriert("GEWICHT");
printZentriert("ART. NR.");
printZentriert("ARTIKELART NR.");
printZentriert("PREIS");
printZentriert("GOLDTYP");
System.out.println();
printLinieLF(5);

Iterator <Bestand>iter = bestandListe.iterator();
while(iter.hasNext())
{

Bestand i = iter.next();

if (i instanceof Goldartikel)
{
s = castDouble2String(i.getGewicht());
printRechtsbuendig(s);

s = castInt2String(i.getArtikelnummer());
printRechtsbuendig(s);

s = castInt2String(i.getArtikelart());
printRechtsbuendig(s);

s = castDouble2String(i.getPreis());
printRechtsbuendig(s);

printRechtsbuendig(Goldtyp.A.getNr());

System.out.println();

}
}
System.out.println();

}






private String castInt2String(int meinInt)
{
return Integer.toString(meinInt);
// die obige Zeile ist von der Funktion identisch zu
// Integer i = new Integer(meinInt);
// return i.toString();
}

private String castDouble2String(double meinDouble)
{
// hier nutzen wir die Format-Anweisung der Klasse String um die Nachkommastellen zu bestimmen etc.
return String.format("%,8.2f", meinDouble);
}

private void printZentriert(String s)
{
System.out.print(baueZentriertenString(s, FELDLAENGE));
}

private void printLinksbuendig(String s)
{
System.out.print(baueLinksbuendigenString(s, FELDLAENGE));
}

private void printRechtsbuendig(String s)
{
System.out.print(baueRechtsbuendigenString(s, FELDLAENGE));
}

private void printLinieLF(int anzahlFelder)
{
/* Besonderheit: hier Nutzung des StringBuilders statt direkt mit String zu arbeiten.
* Ist sparsamer im Umgang mit Speicher.
*/
StringBuilder s = new StringBuilder();
int laenge = anzahlFelder*(FELDLAENGE+3);
for (int i=1;i<=laenge;i++)
{
s=s.append("-");
}
System.out.println(s);
}

private String baueZentriertenString(String s, int laenge)
{
// wir entfernen Leerzeichen am Anfang und Ende des Strings
s.trim();
// falls der String zu lang ist, kuerzen wir ihn
if (s.length() > laenge)
{
s.substring(0, laenge);
}
else
{
int differenzLinks = (laenge - s.length())/2;
for (int i=1;i<=differenzLinks;i++) s=" "+s+" ";
if (s.length()<laenge) s=s+" ";
}

return s+" | ";
}

private String baueRechtsbuendigenString(String s, int laenge)
{
// wir entfernen Leerzeichen am Anfang und Ende des Strings
s.trim();
// falls der String zu lang ist, kuerzen wir ihn
if (s.length() > laenge)
{
s.substring(0, laenge);
}
else
{
int differenzLinks = (laenge - s.length());
for (int i=1;i<=differenzLinks;i++) s=" "+s;
}

return s+" | ";
}

private String baueLinksbuendigenString(String s, int laenge)
{
// wir entfernen Leerzeichen am Anfang und Ende des Strings
s.trim();
// falls der String zu lang ist, kuerzen wir ihn
if (s.length() > laenge)
{
s.substring(0, laenge);
}
else
{
int differenz = (laenge - s.length());
for (int i=1;i<=differenz;i++) s=s+" ";
}

return s+" | ";
}

/**
* Zeigt Informationen zum Programm.
*/

private void printProgrammInfo()
{
System.out.println("");
System.out.println("");
System.out.println("");
System.out.println("");
}

/**
* Statische Main Methode zum starten ohne ein Objekt erzeugen zu müssen.
* @param args
*/
public static void main(String[] args)
{
Verwaltungseinheit v = new Verwaltungseinheit();

v.initData();
v.printProgrammInfo();
v.mainMenue();
}
}


[/code]

Abstrakte Klasse Bestand:
------------------------


[JAVA=42]
public abstract class Bestand
{
private static int artikelnummerGen = 2000;
private int artikelnummer;
private double gewicht;
private int artikelart;
private double preis;


/**
* Standardkonstruktor
*/

public Bestand()
{
}

/**
* Konstruktor der Klasse Goldartikel.
* Übergabe von 2 Parameter übergeben.
* @param gewicht Gewicht des Artikels.
* @param goldtyp Goldtyp des Artikels.
*/

public Bestand(double gewicht, int artikelart, double preis)
{
this.gewicht = gewicht;
this.artikelart = artikelart;
this.preis = preis;
this.artikelnummer = artikelnummerGen;
artikelnummerGen++;


}

/**
* @param preis Preis
*/

public void setPreis(double preis)
{
this.preis = preis;
}

/**
* @return preis Preis
*/

public double getPreis()
{
return this.preis;
}

/**
* @param artilekart Artikelart
*/

public void setArtikelart(int artikelart)
{
this.artikelart = artikelart;
}

/**
* @return artikelart Artikelart
*/

public int getArtikelart()
{
return this.artikelart;
}

/**
* @param artikelnummer Artikelnummer
*/

public void setArtikelnummer(int artikelnummer)
{
this.artikelnummer = artikelnummer;
}

/**
* @return artikelnummer Artikelnummer
*/

public int getArtikelnummer()
{
return this.artikelnummer;
}

/**
* @param gewicht Gewicht des Artikels
*/

public void setGewicht(double gewicht)
{
this.gewicht = gewicht;
}

/**
* @return gewicht Gewicht des Artikels
*/

public double getGewicht()
{
return this.gewicht;
}
[/code]

Klasse Goldartikel:
----------------

[JAVA=42]

public class Goldartikel extends Bestand
{
private Goldtyp goldtyp;

public Goldartikel()
{
}

public Goldartikel(double gewicht, int artikelart, double preis, Goldtyp goldtyp)
{
super(gewicht, artikelart, preis);
this.goldtyp = goldtyp;
}
}

[/code]

enum Klasse Goldtyp:
-------------------

[JAVA=42]
/**
* Diese Klasse "Goldtyp" wird ist vom Typ Enumeration.
* Sie wird von den Klassen Goldartikel, Ring und Halskette genutzt.
* Die definiert damit gültige Typen von Goldartikeln, Ringen und Halsketten.
*/

public enum Goldtyp
{
/**
* Auflistung der gültigen Goldtypen.
* Bei Bedarf können neue hinzugefügt werden.
*/

A("333"),

B("555"),

C("777");

private String nr;

/**
* Im Folgenden sind die Instanzvariabeln definiert.
* Bei Klassen vom Typ Enum werden diese erst hiner der Aufzählung der
* gültigen Typen aufgeführt.
*/

Goldtyp(String nr)
{
this.nr = nr;

}

String getNr()
{
return nr;
}
}
[/code]

So sieht es immer aus:

GEWICHT | ART. NR. | ARTIKELART NR. | PREIS | GOLDTYP |

-------------------------------------------------------------------------------------

10,00 | 2000 | 1 | 50,00 | 333 |

12,00 | 2001 | 1 | 60,00 | 333 |

9,00 | 2002 | 1 | 100,00 | 333 |

4,00 | 2003 | 1 | 300,00 | 333 |



Und so sollt es aussehen:

GEWICHT | ART. NR. | ARTIKELART NR. | PREIS | GOLDTYP |

-------------------------------------------------------------------------------------

10,00 | 2000 | 1 | 50,00 | 333 |

12,00 | 2001 | 1 | 60,00 | 555 |

9,00 | 2002 | 1 | 100,00 | 333 |

4,00 | 2003 | 1 | 300,00 | 555 |


Tabelle ist ein bissel verrutscht!

Ich wär sehr froh, wenn Ihr mir helfen könntet!!!!!
 

eRaaaa

Top Contributor
Kein Wunder bei
Java:
printRechtsbuendig(Goldtyp.A.getNr());

Erstelle in Goldartikel einen Getter für den Goldtyp und rufe dann [c]printRechtsbuendig(((Goldartikel) i).getGoldtyp().getNr());[/c]o.ä. auf
 

Flo123

Mitglied
Kein Wunder bei
Java:
printRechtsbuendig(Goldtyp.A.getNr());

Erstelle in Goldartikel einen Getter für den Goldtyp und rufe dann [c]printRechtsbuendig(((Goldartikel) i).getGoldtyp().getNr());[/c]o.ä. auf


Vielen, vielen Dank!!!!!! Es funktioniert!!!!!:applaus::applaus::applaus::applaus::applaus::applaus::toll::toll::toll:
 

Flo123

Mitglied
Hallo Leute!

Der Tip den ich von Basti bekommen habe, funktioniert wunderbar. Alles läuft wie ich es mir vorstelle.
Nun kann ich zwar alles in eine XML Datei speichern aber sobald ich die XML Datei lade und mir den Bestand anleigen lassen will, kommt folgende Meldung:

-------------------------------------------------------------------------------
Exeption in thread "main" java.lang.Null.PointerException

at Bestand.getGoldpreis(Bestand.java:75)

at Verwaltungseinheit.getGoldartikelbestand(Verwaltungseinheit.java:596)

at Verwaltungseinheit.bestandsverwaltung(Verwaltungseinheit.java:244)

at Verwaltungseinheit.mainMenue(Verwaltungseinheit.java:191)

at Verwaltungseinheit.load(Verwaltungseinheit.java:111)

at Verwaltungseinheit.datenverwaltung(Verwaltungseinheit.java:302)

at Verwaltungseinheit.mainMenue(Verwaltungseinheit.java:195)

at Verwaltungseinheit.main(Verwaltungseinheit.java:1364)

-------------------------------------------------------------------------

Ich vermute, dass es irgendwie mit der ENUM Klasse zusammenhängt. Wenn ich nichts speichern oder laden will ist alles wunderbar. Aber sobald ich speichere und den Goldartikelbestand lade knallts. Und dafür muss ich nicht erst etwas in den Bestand eingefügt haben.

Ich poste mal die Quelltexte der einzelnen Klassen. Vielleicht findet jemand den Fehler. Danke schon mal im Vorraus für Eure Mühe!!! ;););)

Die Verwaltungsklasse, welche die Main Methode hat (etwas gekürzt):
--------------------------------------------------

Java:
 public void getGoldartikelBestand()
    {
        String s;

        System.out.println("GOLDARTIKELBESTAND [ARTIKELART 1]");
        System.out.println("*********************************");
        System.out.println("");
        System.out.println("");
        printZentriert("ARTIKELNUMMER");
        printZentriert("GEWICHT");
        printZentriert("GOLDPREIS");
        printZentriert("ANKAUFPREIS");
        printZentriert("VERKAUFPREIS");
        printZentriert("ANKAUFSPREIS");
        printZentriert("VERKAUFSPREIS");

        System.out.println();
        printLinieLF(7);

        Iterator <Bestand>iter = bestandListe.iterator();
        while(iter.hasNext())
        {

            Bestand i = iter.next();

            if (i instanceof Goldartikel) 
            {
                s = castInt2String(i.getArtikelnummer());
                printRechtsbuendig(s);

                s = castDouble2String(i.getGewicht());
                printRechtsbuendig(s);

                s = castDouble2String(i.getGoldpreis());           <------- ab hier kommt der Fehler!!!
                printRechtsbuendig(s);

                s = castDouble2String(i.getAnkaufpreis());
                printRechtsbuendig(s);

                s = castDouble2String(i.getVerkaufpreis());
                printRechtsbuendig(s);

                System.out.println();

            }
        }
        System.out.println();

    }

    private void neuenGoldartikel()
    {

        double gewicht = Stdin.readlnDouble("GEWICHT:");
        double goldpreis = 0;
        double ankaufpreis = 0;
        double verkaufpreis = 0;

        System.out.println();
        System.out.println("WELCHE ART VON GOLDTYP WOLLEN SIE HINZUFUEGEN?");
        System.out.println();
        System.out.println("EINGABE [A] FÜR GOLDTYP 333");
        System.out.println("EINGABE [B] FÜR GOLDTYP 555");
        System.out.println("EINGABE [code] FÜR GOLDTYP 777");
        System.out.println();

        char goldtyp = Stdin.readlnChar("GOLDTYP:");

        switch(goldtyp)
        {

            case 'A':  

            bestandListe.add(new Goldartikel(gewicht, goldpreis, ankaufpreis, verkaufpreis, Goldtyp.A)); 
            System.out.println();
            System.out.println("GOLDTYP VOM TYP 333 HINZUGEFÜGT");
            System.out.println();
            break;

            case 'B': 

            bestandListe.add(new Goldartikel(gewicht, goldpreis, ankaufpreis, verkaufpreis, Goldtyp.B));
            System.out.println();
            System.out.println("GOLDTYP VOM TYP 555 HINZUGEFÜGT");
            System.out.println();
            break;

            case 'C': 

            bestandListe.add(new Goldartikel(gewicht, goldpreis, ankaufpreis, verkaufpreis, Goldtyp.C));
            System.out.println();
            System.out.println("GOLDTYP VOM TYP 777 HINZUGEFÜGT");
            System.out.println();
            break;
            default: System.out.print("UNBEKANNTE EINGABE!");
            System.out.println();
        }

    }
[/Java]

Abstrakte Klasse Bestand:
-------------------------

[code=Java]
public abstract class Bestand
{
    private static int artikelnummerGen = 2000;    
    private int artikelnummer;
    private double gewicht;
    private double goldpreis;
    private double ankaufpreis;
    private double verkaufpreis;

    public Bestand()
    {
    }

    /**
     * Konstruktor der Klasse Goldartikel.
     * Übergabe von 2 Parameter übergeben.
     * @param gewicht Gewicht des Artikels.
     * @param goldtyp Goldtyp des Artikels.
     */

    public Bestand(double gewicht, double goldpreis, double ankaufpreis, double verkaufpreis)
    {
        this.gewicht = gewicht;
        this.goldpreis = goldpreis;
        this.ankaufpreis = ankaufpreis;
        this.verkaufpreis = verkaufpreis;

        this.artikelnummer = artikelnummerGen;
        artikelnummerGen++;

    }

    /**
     * @param gewicht Gewicht des Artikels
     */

    public void setGewicht(double gewicht)
    {
        this.gewicht = gewicht;
    }

    /**
     * @return gewicht Gewicht des Artikels
     */

    public double getGewicht()
    {
        return this.gewicht;
    }

    public abstract Goldtyp getGoldtyp();

    public double getGoldpreis()
    {
        this.goldpreis = this.gewicht*getGoldtyp().getGrammpreis();
        return this.goldpreis;
    }

    public double getAnkaufpreis()
    {
        this.ankaufpreis = (this.gewicht*getGoldtyp().getGrammpreis()*0.5);
        return this.ankaufpreis;
    }

    public double getVerkaufpreis()
    {
        this.verkaufpreis = (this.gewicht*getGoldtyp().getGrammpreis()*1.5);
        return this.verkaufpreis;
    }

    /**
     * @param artikelnummer Artikelnummer
     */

    public void setArtikelnummer(int artikelnummer)
    {
        this.artikelnummer = artikelnummer;
    }

    /**
     * @return artikelnummer Artikelnummer
     */

    public int getArtikelnummer()
    {
        return this.artikelnummer;
    }

}

Die emum KLasse:
----------------

Java:
/**
 * Diese Klasse "Goldtyp" wird ist vom Typ Enumeration.
 * Sie wird von den Klassen Goldartikel, Ring und Halskette genutzt.
 * Die definiert damit gültige Typen von Goldartikeln, Ringen und Halsketten. 
 */

public enum Goldtyp
{
    /**
     * Auflistung der gültigen Goldtypen.
     * Bei Bedarf können neue hinzugefügt werden.
     */

    A(333, 10.13),

    B(585, 18.44),

    C(999, 31.71);

    private int nr;
    private double grammpreis;

    /**
     * Im Folgenden sind die Instanzvariabeln definiert.
     * Bei Klassen vom Typ Enum werden diese erst hiner der Aufzählung der
     * gültigen Typen aufgeführt.
     */

    Goldtyp(int nr, double grammpreis)
    {
        this.nr = nr;
        this.grammpreis = grammpreis;
    }

    int getNr()
    {
        return this.nr;
    }

    double getGrammpreis()
    {
        return this.grammpreis;
    }

}

Die Klasse Goldartikel:
--------------------

Java:
public class Goldartikel extends Bestand
{
    private Goldtyp goldtyp;

    public Goldartikel()
    {
    }

    public Goldartikel(double gewicht, double goldpreis, double ankaufpreis, double verkaufpreis, Goldtyp goldtyp)
    {
        super(gewicht, goldpreis, ankaufpreis, verkaufpreis);
        this.goldtyp = goldtyp;
    }

    public Goldtyp getGoldtyp()
    {
        return tgoldtyp;
    }

}

So sieht die XML aus:
--------------------

Java:
<?xml version="1.0" encoding="UTF-8" ?> 
- <java version="1.6.0_23" class="java.beans.XMLDecoder">
  <string>Softwareprojekt</string> 
- <object class="Verwaltungseinheit">
- <void property="bestandListe">
- <void method="add">
- <object class="Goldartikel">
- <void property="artikelnummer">
  <int>2000</int> 
  </void>
- <void property="gewicht">
  <double>10.0</double> 
  </void>
  </object>
  </void>
- <void method="add">
- <object class="Goldartikel">
- <void property="artikelnummer">
  <int>2001</int> 
  </void>
- <void property="gewicht">
  <double>12.0</double> 
  </void>
  </object>
  </void>
- <void method="add">
- <object class="Goldartikel">
- <void property="artikelnummer">
  <int>2002</int> 
  </void>
- <void property="gewicht">
  <double>9.0</double> 
  </void>
  </object>
  </void>
- <void method="add">
- <object class="Goldartikel">
- <void property="artikelnummer">
  <int>2003</int> 
  </void>
- <void property="gewicht">
  <double>4.0</double> 
  </void>
  </object>
  </void>
- <void method="add">
- <object class="Halskette">
- <void property="artikelnummer">
  <int>2004</int> 
  </void>
- <void property="gewicht">
  <double>8.0</double> 
  </void>
  </object>
  </void>
- <void method="add">
- <object class="Halskette">
- <void property="artikelnummer">
  <int>2005</int> 
  </void>
- <void property="gewicht">
  <double>15.0</double> 
  </void>
  </object>
  </void>
- <void method="add">
- <object class="Halskette">
- <void property="artikelnummer">
  <int>2006</int> 
  </void>
- <void property="gewicht">
  <double>13.0</double> 
  </void>
  </object>
  </void>
- <void method="add">
- <object class="Halskette">
- <void property="artikelnummer">
  <int>2007</int> 
  </void>
- <void property="gewicht">
  <double>15.0</double> 
  </void>
  </object>
  </void>
- <void method="add">
- <object class="Ring">
- <void property="artikelnummer">
  <int>2008</int> 
  </void>
- <void property="gewicht">
  <double>4.0</double> 
  </void>
  </object>
  </void>
- <void method="add">
- <object class="Ring">
- <void property="artikelnummer">
  <int>2009</int> 
  </void>
- <void property="gewicht">
  <double>5.0</double> 
  </void>
  </object>
  </void>
- <void method="add">
- <object class="Ring">
- <void property="artikelnummer">
  <int>2010</int> 
  </void>
- <void property="gewicht">
  <double>8.0</double> 
  </void>
  </object>
  </void>
- <void method="add">
- <object class="Ring">
- <void property="artikelnummer">
  <int>2011</int> 
  </void>
- <void property="gewicht">
  <double>10.0</double> 
  </void>
  </object>
  </void>
  </void>
- <void property="kundenListe">
- <void method="add">
- <object class="Kunde">
- <void property="kundennummer">
  <int>2000</int> 
  </void>
- <void property="name">
  <string>Heinz</string> 
  </void>
- <void property="telefonnummer">
  <string>0680 674635</string> 
  </void>
- <void property="vorname">
  <string>Becker</string> 
  </void>
  </object>
  </void>
- <void method="add">
- <object class="Kunde">
- <void property="kundennummer">
  <int>2001</int> 
  </void>
- <void property="name">
  <string>Karl</string> 
  </void>
- <void property="telefonnummer">
  <string>948 37736</string> 
  </void>
- <void property="vorname">
  <string>Guenter</string> 
  </void>
  </object>
  </void>
- <void method="add">
- <object class="Kunde">
- <void property="kundennummer">
  <int>2002</int> 
  </void>
- <void property="name">
  <string>Alfered</string> 
  </void>
- <void property="telefonnummer">
  <string>0495 837485</string> 
  </void>
- <void property="vorname">
  <string>Meier</string> 
  </void>
  </object>
  </void>
- <void method="add">
- <object class="Kunde">
- <void property="kundennummer">
  <int>2003</int> 
  </void>
- <void property="name">
  <string>Florian</string> 
  </void>
- <void property="telefonnummer">
  <string>0463 78473</string> 
  </void>
- <void property="vorname">
  <string>Sauer</string> 
  </void>
  </object>
  </void>
  </void>
  </object>
  </java>
 

Landei

Top Contributor
Ich vermute mal, die Zeile 75 in Bestand ist
Java:
     this.goldpreis = this.gewicht*getGoldtyp().getGrammpreis();

Also liefert wahrscheinlich getGoldtyp() null (was du leicht mit einen System.out.println klären kannst). Nun handelt es sich dabei um eine abstrakte Methode. In GoldArtikel sieht alles super aus, also würde ich spontan darauf tippen, dass dein normaler Artikel dort null liefert. Wenn dem so ist fragt man sich natürlich, warum für einen normalen Artikel diese Methode überhaupt aufgerufen wird...
 

Flo123

Mitglied
Ich vermute mal, die Zeile 75 in Bestand ist
Java:
     this.goldpreis = this.gewicht*getGoldtyp().getGrammpreis();

Also liefert wahrscheinlich getGoldtyp() null (was du leicht mit einen System.out.println klären kannst). Nun handelt es sich dabei um eine abstrakte Methode. In GoldArtikel sieht alles super aus, also würde ich spontan darauf tippen, dass dein normaler Artikel dort null liefert. Wenn dem so ist fragt man sich natürlich, warum für einen normalen Artikel diese Methode überhaupt aufgerufen wird...

Ja, genau diese Zeile ist es, die Probleme macht. Ich hab nur leider kein Wort von dem verstanden, was Du geschrieben hast.
(Bin bin ein absoluter Java Neuling und sitze daran schon 2 Wochen ununterbrochen in jeder freien Minute. Um so frustierter war ich, als ich dachte ich sei endlich fertig und nun klappt das mit dem Laden nicht :(:(:( . Was meinst du genau mit "normaler Artikel"?
 

Landei

Top Contributor
Das ist jetzt nur eine Vermutung: Außer Goldartikel hast du doch sicher auch noch eine andere Klasse, die von Bestand ableitet (sonst brauchst du keine abstrakte Klasse). Diese Klasse muss auch getGoldtyp() implementieren, da die Methode ja abstrakt in Bestand vorgegeben ist. Dort könnte die null herkommen, die zur NullpointerException führt.

Aber ich sehe gerade, dass du für Goldartikel auch einen parameterlosen Konstruktor hast. Wenn du den benutzt, sind natürlich alle Instanzvariablen erst mal null.

Um es ganz einfach zu machen: Packe mal ein paar Ausgaben in Bestand.getGoldpreis(), etwa:

Java:
    public double getGoldpreis()
    {
        System.out.println("Klasse :" + this.getClass()); 
        System.out.println("Gewicht :" + this.gewicht); 
        System.out.println("GoldTyp :" + getGoldtyp()); 
        this.goldpreis = this.gewicht*getGoldtyp().getGrammpreis();
        System.out.println("fertig gerechnet");
        return this.goldpreis;
    }

Die letzte Ausgabe, wo das "fertig gerechnet" nicht kommt, sondern die NullPointerException, sollte dir sagen, was falsch ist. Dann musst du nur noch das "warum?" klären.

Das ist übrigens der ganz große Nachteil von null: Es kracht nicht da, wo eine null fälschlich zugewiesen wird, sondern erst später bei der Verwendung. Selbt der "Erfinder" der Nullreferenz hält sie inzwischen für eine schlechte Idee. Bei deinem Design sollte jederzeit glasklar sein, welche Werte null werden dürfen, und was null in diesen Fällen bedeutet.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
H Problem mit Verzweigungen Java Basics - Anfänger-Themen 6
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
A Code Problem Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
K jackson Mapping - Problem mit Zeitzonen Java Basics - Anfänger-Themen 10
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D Schleifen Problem Java Basics - Anfänger-Themen 2
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J JAVA-Problem blockiert MEDIATHEKVIEW Java Basics - Anfänger-Themen 13
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8
J extends Problem Java Basics - Anfänger-Themen 2
C Polymorphie-Problem Java Basics - Anfänger-Themen 3
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
amgadalghabra algorithmisches Problem Java Basics - Anfänger-Themen 19
J Traveling Salesman Problem [Arrays] Java Basics - Anfänger-Themen 9
R ArrayList Problem Java Basics - Anfänger-Themen 6
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
C RegEx Problem Java Basics - Anfänger-Themen 4
J Anfänger TicTacToe, Problem bei Gewinnoption, sowohl Unentschieden Java Basics - Anfänger-Themen 8
E Taschenrechner GUI Problem mit Fehlerhandling Java Basics - Anfänger-Themen 6
M Input/Output Fallunterscheidung Problem Java Basics - Anfänger-Themen 17
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
M Problem bei Ausgabe Java Basics - Anfänger-Themen 7
Splayfer Java Array Problem... Java Basics - Anfänger-Themen 2
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
G Subset sum problem mit Backtracking Java Basics - Anfänger-Themen 18
N Problem mit Scanner Java Basics - Anfänger-Themen 2
J Klassen Problem Java Basics - Anfänger-Themen 8
A Out.format problem. Java Basics - Anfänger-Themen 3
J Problem bei der Programmierung eines Tannenbaums Java Basics - Anfänger-Themen 9
A Array problem Java Basics - Anfänger-Themen 16
2 Taschenrechner mit GUI Problem bei der Berechnung Java Basics - Anfänger-Themen 8
W Remote Method Invocation RMI - Problem Java Basics - Anfänger-Themen 0
I Ich habe ein Problem Java Basics - Anfänger-Themen 3
A Problem bei returnen eines Wertes Java Basics - Anfänger-Themen 6
M Regex Erstellung Problem Java Basics - Anfänger-Themen 2
D Input/Output Problem bei der Benutzereingabe eines Befehls Java Basics - Anfänger-Themen 14
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
F Habe ein problem mit dem ActionListener Java Basics - Anfänger-Themen 3
C Regex-Problem Java Basics - Anfänger-Themen 4
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
M Problem in der Modellierung Java Basics - Anfänger-Themen 20
W Wo ist das URL-Problem ? Java Basics - Anfänger-Themen 1
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
D FileWriter / FileReader Problem Java Basics - Anfänger-Themen 10
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
J Problem mit Array: 2 Klassen Java Basics - Anfänger-Themen 2
S Collections funktionale Listen (ListNode<E>) review und problem beim clone Java Basics - Anfänger-Themen 0
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
C Problem mit If Else If und Überprüfung eines Counters Java Basics - Anfänger-Themen 3
F Problem mit Listen Java Basics - Anfänger-Themen 5
I wieder mit einer Umwandelung habe ich Problem (diesmal von char Array zu char) Java Basics - Anfänger-Themen 1
J Problem bei Umrechnung von Hex in Bin Java Basics - Anfänger-Themen 4
W Problem bei Programmierung von Monte-Carlo-Integration Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben