Datenstruktur Feld + Verkettete Liste

Sky00

Grünschnabel
Hallo allerseits! :)

Klar es kommt unhöflich vor, dass mein erster Post gleich ein Hilferuf ist, aber ich hoffe ich werde hier nicht auseinander gerissen.

Man erstelle eine Klasse Buch, die folgend aussehe:

Code:
public class Buch {

  private String meinTitel;
  private String meineISBN;


  public Buch(String einTitel, String eineISBN) {
     meinTitel = einTitel;
     meineISBN = eineISBN;


  }

  public String getTitel() {
    return meinTitel;
  }

  public String getISBN() {
    return meineISBN;
  }

}

Die Elemente Bücher sollen nun auf zwei Arten verwalten werden.
Ich habe mich zu erst an die Datenstruktur Feld rangemacht, und stoße, wie wohl die meisten hier,
auf eine Null-Pointer-Exception...

Code:
public class Buecherfeld {

  private Buch[] meinBuecherfeld;
  private int ersteFreiePosition = 0;
  
  public Buecherfeld(int groesse)
  {
    	  meinBuecherfeld = new Buch[groesse];
  }
  
  
  public void buchEinfuegen(Buch einBuch)
  {
         meinBuecherfeld [ersteFreiePosition] = einBuch;
         ersteFreiePosition = ersteFreiePosition + 1;
  }

  public Buch sucheBuch(String eineISBN)
  {
         String suchISBN = meinBuecherfeld[ersteFreiePosition].getISBN();
         
         for (int i= 0; i<=ersteFreiePosition ; i++)
         {
             if (eineISBN.equals(suchISBN))
             {
                return meinBuecherfeld[i];
             }

         }
         return null;
  }


  public static void main(String[] args)
  {
    Buecherfeld meinBuecherfeld = new Buecherfeld(10);
    meinBuecherfeld.buchEinfuegen(new Buch("Informatik I", "789999324552"));
    meinBuecherfeld.buchEinfuegen(new Buch("Informatik II", "789999324573"));
    System.out.println(meinBuecherfeld.sucheBuch("789999324573").getTitel());
  }
}

Bücher Einfügen funktioniert angeblich, kann das aber nicht bestätigen.
Die Suchmethode funktioniert als solches wohl nicht und verursacht die besagte NPE; und die zwei "return" erscheinen mir auch falsch...!

Bin für jeden Tipp Dankbar, selbst für Links die mich der Thematik näher bringen!


Vielen Dank, Sky-zero-zero, :)
 

zeja

Erfahrenes Mitglied
meinBuecherfeld[ersteFreiePosition]

Das kann ja nicht gehen, denn an ersteFreiePosition steht doch noch gar nichts denn die Position ist ja noch frei. Daher ist das was du zurückbekommst null und der Aufruf einer Methode auf null führt zu einer NullPointerException.
 

Sky00

Grünschnabel
Ah dankeschön! :rolleyes:

Habe nun die Klasse fertig.! :)
Code:
public class Buecherfeld {

  private Buch[] meinBuecherfeld;
  private int ersteFreiePosition = 0;
  private Buch gefundenesBuch = null;
  
  public Buecherfeld(int groesse)
  {
    	meinBuecherfeld = new Buch[groesse];
  }  
  
  public void buchEinfuegen(Buch einBuch)
  {
         meinBuecherfeld [ersteFreiePosition] = einBuch;
         ersteFreiePosition = ersteFreiePosition + 1;

		//sortieren
		if ( meinBuecherfeld.length - ersteFreiePosition <= meinBuecherfeld.length -2 )
			{	
				int j = 1;
				for (int i = 0; i < ersteFreiePosition -1; i++)
					{
						if ( meinBuecherfeld[i].getISBN().compareTo( meinBuecherfeld[j].getISBN() ) > 0 )
							{
								Buch Temp = meinBuecherfeld[i];
								meinBuecherfeld[i] = meinBuecherfeld[j];
								meinBuecherfeld[j] = Temp;
							}
						j++;
					}
			}  	 
  }

  public Buch sucheBuch(String eineISBN)
  {
  	      
         for (int i= 0; i<ersteFreiePosition ; i++)
         {
             if (eineISBN.equals(meinBuecherfeld[i].getISBN()))
             {
                gefundenesBuch = meinBuecherfeld[i];
             }
         }   

      	return gefundenesBuch;

  }


  public static void main(String[] args)
  {
    Buecherfeld meinBuecherfeld = new Buecherfeld(10);
    meinBuecherfeld.buchEinfuegen(new Buch("Informatik I", "789999324553"));
    meinBuecherfeld.buchEinfuegen(new Buch("Informatik II","789999324572"));
    System.out.println(meinBuecherfeld.sucheBuch("789999324572").getTitel());
  }
  
}

mach mich jetzt mal an die verkettete Liste ran..! ^^
 

Sky00

Grünschnabel
############## VERKETTETE LISTE ##############

So, ich habe im Moment noch nicht mal einen ordentlichen Ansatz.
Mit ist Klar, das ich eine Klasse / Datentyp "Element" erzeugen muss, in dem die Daten von dem Dateityp "Buch" und deren nächstem Nachfolger gespeichert sind.

Dies habe ich mit folgender Klasse versucht:

PHP:
public class Element 
{
	Buch meinBuch;
	Element nachfolger;
	
    public Element() { }
    
    
    
    public Buch getBuch()
    {
    	return meinBuch;
    }
    
    public void setBuch (Buch einBuch)
    {
    	meinBuch = einBuch;
    }
    
    public Element getNachfolger()
    {
    	return nachfolger;
    }
    
    public void setNachfolger (Element neuerNachfolger)
    {
    	nachfolger = neuerNachfolger;
    }
    
    

    
}

Ich habe hier Zweifel an der Richtigkeit des leer gelassenem Konstruktors.
___________________

Die Klasse Bücherliste sollte vor allem erstmal Bücher einfügen und suchen können.
Mir ist jedoch nicht klar, wie ich ein neues Element mit den Werten des Buches und seinen Nachfolgern erzeuge.

PHP:
public class Buecherliste {

  private Element erstesElement;
  private int groesse = 0;

  public void buchEinfuegen(Buch einBuch)
  {

	
  }

  
  public Buch sucheBuch(String eineISBN)
  {
  	// damit der Compiler nicht streikt zunächst nur:
	return null;
  }
  
  public int getGroesse()
  {
    return groesse;
  }

  public static void main(String[] args)
  {
    Buecherliste meineBuecherliste = new Buecherliste();
    meineBuecherliste.buchEinfuegen(new Buch("Informatik I", "789999324552"));
    meineBuecherliste.buchEinfuegen(new Buch("Informatik II", "789999324573"));
    System.out.println(meineBuecherliste.sucheBuch("789999324573").getTitel());
  }

}

___________________

Wer sich einen ungefähren Aufbau des ganzen Anschauen möchte, kann dies hier tun:

http://img132.imageshack.us/img132/7036/premathop1.jpg
____________________

Die ganze Sache hat wohl auch mit Rekursion und Vererbung zu tun.
Vielleicht hilft euch das ja weiter. Oo



Jacki.
 

zeja

Erfahrenes Mitglied
Such doch hier bitte mal nach verkettete Liste. Da gab es schon sehr viele Fragen zu. Und auch im Internet findet man ganz gut was.