Spezielle Operation

Status
Nicht offen für weitere Antworten.
L

LeSmou

Gast
Hallihallo,

ich hatte die Aufgabe eine kleine Bibliotheksverwaltung zu programmieren:

Sie sollen eine Bibliotheksverwaltung programmieren. Die Anforderungen an das Programm sind in folgendem Pflichtenheft zusammengestellt:

Buch
1. ISBN, Titel, Erscheinungsjahr und Anzahl der Exemplare sollen gespeichert werden.
2. alle Daten müssen einzeln gelesen werden können.
3. Ein neues Buch kann nur angelegt werden, wenn die ISBN bekannt ist. Die Anzahl der Exemplare wird mit 1 voreingestellt.
4. Titel und Erscheinungsjahr müssen einzeln gespeichert bzw. geändert werden können.
5. Die Anzahl der Exemplare kann um einen beliebigen Wert erhöht werden.
6. zu jedem Buch kann es höchstens einen Herausgeber geben. Stellen Sie entsprechende Operationen bereit, um diese Assoziation zu verwalten
7. Es soll eine Operation bereitgestellt werden, um alle Angabe zu einem Buch auszugeben. Falls kein Herausgeber existiert, soll die Meldung „kein Herausgeber“ erscheinen.

Herausgeber
1. Besteht aus einem Namen und einem Kürzel für das Geschlecht (m/w)
2. zum Anlegen eines Herausgebers müssen Namen und Kürzel bekannt sein.
3. alle Daten müssen einzeln gelesen werden können.

Zur Aufgabe gehören:
• Erstellen von zwei Java-Fachkonzeptklassen, die den obigen Anforderungen genügen.
• Ergänzen der Fachkonzeptklassen um eine Start-Klasse, die einen Herausgeber und zwei Bücher anlegt und diese dann anzeigt. Dabei sollen alle Attribute belegt und angezeigt werden. Nur einem Buch soll tatsächlich einem Herausgeber zugeordnet werden.
• Erstellen Sie den Quellcode unter Beachtung der beschriebenen Konventionen und Emp-fehlungen.


Hat auch alles wunderbar funktioniert, bloß beim fett markierten Teil habe ich noch Probleme, denn ich bekomme es einfach nicht hin, dass kein Herausgeber angezeigt wird, wenn ich das Buch keinem Herausgeber zuordne, denn sobald ich, dass mache kommt ne Fehlermeldung! Hat jemand ne Lösung für mein Problem?

Hier mal meine drei Klassen:

Code:
public class Buch {

  private int isbn;
  private String titel;
  private int erscheinungsJahr;
  private int anzahlExemplare = 1;
  private Herausgeber herausGeber;

  public Buch(int isbn) {
    this.isbn = isbn;
  }
  public int getAnzahlExemplare() {
    return anzahlExemplare;
  }
  public int getErscheinungsJahr() {
    return erscheinungsJahr;
  }
  public int getIsbn() {
    return isbn;
  }
  public String getTitel() {
    return titel;
  }
  public void setErscheinungsJahr(int erscheinungsJahr) {
    this.erscheinungsJahr = erscheinungsJahr;
  }
  public void setTitel(String titel) {
    this.titel = titel;
  }
  public void erhoeheAnzahlExemplareUm(int neueAnzahlExemplare){
    this.anzahlExemplare = anzahlExemplare + neueAnzahlExemplare;
  }
  public void setHerausGeber(Herausgeber hg) {
   herausGeber = hg;
  }
  public String toString(){
    String info = "ISBN: " +isbn+ "\nTitel: "+titel+ "\nErscheinungsjahr: "+erscheinungsJahr
        + "\nAnzahl der Exemplare: "+anzahlExemplare+ "\nHerausgeber: " +herausGeber.getName()+" "
        +herausGeber.getGeschlecht();
        return info;
  }


}

Code:
public class Herausgeber {

  private String name;
  private char geschlecht;

  public Herausgeber(String name, char geschlecht) {
    this.name = name;
    this.geschlecht = geschlecht;
  }
  public char getGeschlecht() {
    return geschlecht;
  }
  public String getName() {
    return name;
  }

}

Code:
public class Start {
  public static void main(String[] args) {

    Herausgeber h1 = new Herausgeber("Heinz Müller", 'm');
    Buch b1 = new Buch(46546465);
    Buch b2 = new Buch(78979878);

    b1.setHerausGeber(h1);
    b1.setErscheinungsJahr(2001);
    b1.setTitel("Java für Anfänger");
    b1.erhoeheAnzahlExemplareUm(1);

    System.out.println("\n"+b1.toString());

    
    b2.setErscheinungsJahr(2003);
    b2.setTitel("SQL für Profis");
    b2.erhoeheAnzahlExemplareUm(10);

    System.out.println("\n"+b2.toString());

  }
}
 

Nobody

Top Contributor
1. du musst ein sammlung von diesen elementen erstellen (vector, lineare liste, hashtabel)
2. zum fettgedruckten:
jenachdem wie du die sammlung machst erflogt eine unterschiedliche abfrage:
array:
durchlaufe und vergleiche die isbn aller elemente bis zum letzen nicht gefüllten element
vorteil: einfacher zugriff
nachteil: begrenzte anzahl von elementen
vector:
funktioniert prinzipiel wie das array
vorteil: unebgrenzt viele elemente, einfacher zugriff
nachteil: braucht mehr speicher als die anderen varianten
lineare liste:
durchlaufe das ganze solange bis kein nächstest vorhanden ist (ein element zeigt auf ein anderes)
vorteil: unbegrenzt viele elemente, schneller als vector

hashtabel:
einsortieren in eine liste über einen hash wert
vorteil: isbn kann als zugriffswert genommen und macht das überwachen ganz einfach, da nicht 2mal der gleiche wert genommen werden kann
 
G

Guest

Gast
@nobody

Darum geht es doch gar nicht!

@LeSmou

Du greifst in toString von Buch direkt auf eine Funktion von Herausgeber zu, das geht natürlich nur wenn Herausgeber auch existiert.

Lösung:
Den Herausgeber toString part in die Herausgeber Klasse packen und in Buch toString von Herausgeber nur aufrufen wenn herausgeber != null ist.

Gruß Paul
 
L

LeSmou

Gast
Anonymous hat gesagt.:
@nobody

Darum geht es doch gar nicht!

@LeSmou

Du greifst in toString von Buch direkt auf eine Funktion von Herausgeber zu, das geht natürlich nur wenn Herausgeber auch existiert.

Lösung:
Den Herausgeber toString part in die Herausgeber Klasse packen und in Buch toString von Herausgeber nur aufrufen wenn herausgeber != null ist.

Gruß Paul

Kanst du das noch ein bisschen genauer erklären, habs noch nicht ganz gerafft! :oops:
 

Nobody

Top Contributor
lesmou, war nur ne lösung für deine frage :rolleyes:

schau die mal hashtabel an dann siehst, das es damit wunderbar geht.

Nur einem Buch soll tatsächlich einem Herausgeber zugeordnet werden.

wir sollen dir dazu helfen und ich hab dir ne möglichkeit dazu aufgezeigt.

also nochmal allgemein:
frage ob die isbn nr (ist einem buch ja eindeutig zuordnugnsbar) schon vorhanden ist, wenn ja unterbindest du das einlesen.
jetzt klar?
 
G

Guest

Gast
Wenn du keinen Herausgeber dem Buch zuweist ist das Okjekt herausgeber null
Wenn du nun in buch.toString() auf das Objekt zugreifst mit "herausGeber.getName()" kommt es zu einer NullpointerException.

Die kannst du nur umgehen, wenn du vor dem Zugriff prüfst ob herausgeber!=null ist.

Gruß Paul

PS: Wenn du das nächste mal die entsprechende Fehlermeldung mitpostest, kann man dir auch schneller helfen.
 

Nobody

Top Contributor
alternative: alle nicht belegten werte erhalten: bei strings den wert ("") bei zahlen (0) bei boolean (false) char (' ')

ist einfacher und schneller, da eine abfrage zeit kostet
 
G

Guest

Gast
Nobody hat gesagt.:
alternative: alle nicht belegten werte erhalten: bei strings den wert ("") bei zahlen (0) bei boolean (false) char (' ')

ist einfacher und schneller, da eine abfrage zeit kostet

Die Abfrage pb ein Object null ist, kostet so gut wie keine Zeit.
Ein Object das nicht genutzt wird anzulegen ist um ein vielfaches aufwendiger.

Und da der Herausgeber nicht existiert, bringt auch das vorbelegen nichts.

Gruß Paul
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Spezielle frage zum Comparator Java Basics - Anfänger-Themen 6
TimoN11 Java spezielle Suchprobleme - Aufgabe Java Basics - Anfänger-Themen 5
S spezielle Wörter aus Liste entfernen Java Basics - Anfänger-Themen 2
T Spezielle Aufgabe zu Schleifen Java Basics - Anfänger-Themen 3
J Spezielle Ausgabe Formatierung Java Basics - Anfänger-Themen 4
X Einfache Frage; wie soll ich die spezielle float var speichern? Java Basics - Anfänger-Themen 2
P Methoden Erklärung wie ich eine spezielle Methode richtig anwende Java Basics - Anfänger-Themen 9
J Spezielle Matrix ausgeben ! Java Basics - Anfänger-Themen 8
N Linie auf spezielle Area zeichnen Java Basics - Anfänger-Themen 9
C Spezielle Array-Abfrage Java Basics - Anfänger-Themen 11
U Spezielle if-Schleife erstellen Java Basics - Anfänger-Themen 6
L String darf nur spezielle Zeichen enthalten Java Basics - Anfänger-Themen 6
R Mega NewbieFragen + eine spezielle^^ Java Basics - Anfänger-Themen 2
H String-Operation replace() - Zeichenkette verdoppeln Java Basics - Anfänger-Themen 2
A Modulo operation Java Basics - Anfänger-Themen 5
A Welche Operation ist das? Java Basics - Anfänger-Themen 2
E Ist eine Datenvearbeitung eine kritische Operation? Java Basics - Anfänger-Themen 1
V Operatoren Warum kommt nicht das gewünschte Ergebnis dieser Operation? Java Basics - Anfänger-Themen 3
C Laufzeit von Stack Operation Java Basics - Anfänger-Themen 5
D Problem: Oder-Operation Java Basics - Anfänger-Themen 2
K Erste Schritte boolesche Operation Java Basics - Anfänger-Themen 6
1 Charakteristische Operation? Java Basics - Anfänger-Themen 4
M Einfache Java Operation, cheggs net Java Basics - Anfänger-Themen 2
I Auf DB-Operation warten Java Basics - Anfänger-Themen 2
T ConcurrentModificationException bei HashMap Operation Java Basics - Anfänger-Themen 2
T Operation in Thread auslagern? Java Basics - Anfänger-Themen 7
semaJ Frage bezüglich String Operation ! Java Basics - Anfänger-Themen 3
D Programm für Operation anhalten Java Basics - Anfänger-Themen 6
G Split Operation: ein oder mehrere Leerzeichen Java Basics - Anfänger-Themen 7
T Plus-Operation beim Taschenrechner klappt nicht. Java Basics - Anfänger-Themen 7
S Zuweisung mit Operation "^=" Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben