Announcement

Collapse
No announcement yet.

Probleme mit dem Konstruktor

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Probleme mit dem Konstruktor

    Hallo,

    ich habe folgendes Programm geschreiben:

    <PRE>
    import Prog1Tools.IOTools;

    class Datensatz {

    protected double Betrag;
    protected int Tag;
    protected int Monat;
    protected int Haeufigkeit;
    protected String Beschreibung;
    protected String Glaeubiger;

    public Datensatz()
    {
    IOTools.readLine("");
    Beschreibung=IOTools.readLine("Beschreibung: ");
    Glaeubiger=IOTools.readLine("Glaeubiger: ");
    Tag=IOTools.readInteger("Tag: ");
    Monat=IOTools.readInteger("Monat: ");
    Haeufigkeit=IOTools.readInteger("Haeufigkeit: ");
    Betrag=IOTools.readDouble("Betrag: ");
    IOTools.readLine("");
    System.out.println();
    }

    public void zeigeDaten()
    {
    System.out.println("Glaubiger: \t"+Glaeubiger);
    System.out.println();
    System.out.println("Beschreibung: \t"+Beschreibung);
    System.out.println("Datum: \t"+Tag+"."+Monat);
    System.out.println("Haeufigkeit: \t"+Haeufigkeit);
    System.out.println();
    System.out.println("Betrag: \t"+Betrag+" EUR");
    }

    }

    public class Ausgaben {

    protected Datensatz [] Verpfl;

    public Ausgaben (int n)
    {
    Verpfl = new Datensatz[n];
    }

    public void zeigeAusgaben()
    {
    double summe = 0;
    System.out.println("----------------------------------------------");
    for(int i=0; i<Verpfl.length; i++)
    {
    <b>Verpfl[i].zeigeDaten();</b> // Zeile aus Fehlermeldung
    summe = summe + Verpfl[i].Betrag;
    System.out.println("----------------------------------------------");
    }
    System.out.println("Summe der Ausgaben: "+summe+" EUR");
    System.out.println("----------------------------------------------");
    System.out.println();
    }

    public void sortiereAusgabe()
    {
    Datensatz temp=new Datensatz();
    for (int i=(Verpfl.length-2); i==0; i--)
    for (int j=0; j<=i; j++)
    if (istBesser(Verpfl[j], Verpfl[j+1])) {
    temp=Verpfl[j];
    Verpfl[j] = Verpfl[j+1];
    Verpfl[j+1] = temp;
    }
    }

    public boolean istBesser(Datensatz D1, Datensatz D2)
    {
    if (D1.Betrag>=D2.Betrag) {return true;} else {return false;}
    }

    public static void main(String[ ] args)
    {
    int n=0;

    System.out.println();
    System.out.println(" A U S G A B E N");
    System.out.println();
    n=IOTools.readInteger("Anzahl der Datensaetze: ");
    Ausgaben a = new Ausgaben(n);
    IOTools.readLine("");
    System.out.println();
    System.out.println("Vor dem Sortieren:");
    <b>a.zeigeAusgaben();</b> // Zeile aus Fehlermeldung
    System.out.println("Nach dem Sortieren:");
    a.sortiereAusgabe();
    a.zeigeAusgaben();
    }


    }
    </PRE>
    (Die verwendete Klasse IOTools ist selbst geschrieben und funktioniert auch)

    Folgenes Problem besteht. Ich kann das Prog. zwar ohne Probleme komblieren, aber beim ausführen bekomme ich folgende Fehlermeldung:
    <b>Exception in thread "main" java.lang.NullPointerException at Ausgaben.zeigeAusgaben(Ausgaben.java:56)
    at Ausgaben.main(Ausgaben.java:94)
    </b>
    (Zeile 56 und 94 sind die Fett geschriebenen)

    Ich habe herausgefunden, dass wenn ich nur eine Instaz der Klasse Datensatz aufrufe alles wunderbar geht. Es kommt nur bei der "instanziierung eines ganzen Arreys (wie im Prog. nötig, zu dem Fehler.
    Kann mir jemand helfen? Bin am verzweilen und habe schon das ganze Netz durchforscht.

  • #2
    Problem hat sich erledigt, habe den Fehler gefunden. Es hat eine Schleife gefehlt in der ich dem Array Daten zuweise

    Comment


    • #3
      Hallo,

      Sie haben im Konstruktur nur ein Array von n Datensatz - Objektvariablen angelegt. Die Objekte selbst existieren aber noch nicht. Diese müssen dann in einem 2. Schritt erzeugt werden. So sollte es gehen...
      <br>
      <code>
      public Ausgaben (int n)
      {
      Verpfl = new Datensatz[n];
      for(int k = 0; k < n; k++)
      Verpfl[k] = new Datensatz();
      }
      </code>

      Gruß
      D

      Comment

      Working...
      X