Vererbung Problem Vererbung/Exceptions

Status
Nicht offen für weitere Antworten.

MacMurdock

Aktives Mitglied
Hallo,
Ich habe eine weitere Frage zu Exceptions/Vererbung und zwar habe ich folgende Aufgabe:

Schreiben Sie eine Klasse Lager, die es erlaubt Lagerartikel in einer ArrayList zu verwalten. Implementieren Sie Methoden zum Anzeigen aller Artikel und zum Einfügen und Suchen von einzelnen Artikeln nach der Modellbezeichnung. Wird ein Artikel bei der Suche nicht gefunden soll eine Exception geworfen werden. Definieren Sie dazu eine eigene Exceptionklasse. Die ANzeige soll sortiert nach ArtikelCode erfolgen.

Was ich nicht verstehe ist wie kann ich im Lager nach dem Attribut Modell suchen wenn eigentlich nur die Klasse Stichsäge über Modell verfügt? Hier mal mein Code:

Klasse LagerArtikel
Java:
public abstract class LagerArtikel {
	
	private static final long groessterArtikelCode = 16012012;
	
	private int regalNr = 0;
	private int fachNr = 0;
	private int artikelCode;

	
	
	
	public LagerArtikel(int regalNr, int fachNr, int artikelCode) {
		if ( regalNr <= 0 )
			 throw new IllegalArgumentException( "Keine RegalNr <= 0 erlaubt!" );
		this.regalNr = regalNr;
		if ( fachNr <= 0 )
		    throw new IllegalArgumentException( "Keine FachNr <= 0 erlaubt!" );
		this.fachNr = fachNr;
		if ( artikelCode <= 0 )
		    throw new IllegalArgumentException( "Kein ArtikelCode <= 0 erlaubt!" );
		this.artikelCode = artikelCode;
	}

	
	
	public void setRegalNr(int regalNr) {
		this.regalNr = regalNr;
		regalNr++;
	}

	public void setFachNr(int fachNr) {
		this.fachNr = fachNr;
		fachNr++;
	}

	public void setArtikelCode(int artikelCode) {
		this.artikelCode = artikelCode;
	}



	public int getRegalNr(){
		return regalNr;
	}
	
	public int getFachNr(){
		return fachNr;
	}
	
	public int getArtikelCode(){
		if(artikelCode < 0)
			  throw new IllegalArgumentException("Fehler, artikelCode muss positiv sein!");
		return artikelCode;
	}
	
}

Klasse HeimwerkerGeraet
Java:
public abstract class HeimwerkerGeraet extends LagerArtikel {

	private String hersteller;
	private String geraeteklasse;
	
	
	public HeimwerkerGeraet(int regalNr, int fachNr, int artikelCode, String hersteller, String geraeteklasse){
		super(17, fachNr, artikelCode);
		this.hersteller = hersteller;
		this.geraeteklasse = geraeteklasse;
		regalNr = 17;
	}
	
	
}

Klasse Stichsäge
Java:
import java.util.Calendar;

public class Stichsaege extends HeimwerkerGeraet {

	private int watt;
	private String Modell;
	
	
	public Stichsaege(int regalNr, int fachNr, int artikelCode,
			String hersteller, String geraeteklasse, int watt, String modell) {
		super(regalNr, fachNr, artikelCode, hersteller, geraeteklasse);
		this.watt = watt;
		Modell = modell;
		fachNr = Calendar.getInstance().get(DAY_OF_WEEK);
	}
	
	
}
Klasse Lager
Java:
import java.util.ArrayList;


public class Lager {
	
	private ArrayList<LagerArtikel> lagerartikel;

	public Lager() {
		super();
		this.lagerartikel = new ArrayList<LagerArtikel>();
	}

	
	
	
	public ArrayList<LagerArtikel> getLagerartikel() {
		return lagerartikel;
	}


	public void add(LagerArtikel la) {
		lagerartikel.add(la);
	}

	public void durchsuche(){
		  if (lagerartikel.contains("Item 1")) {
	            System.out.println("True");
	        } else {
	        	throw new LagerException(getModell(),"Dieses Modell ist nicht vorhanden");
	        }
		
	}
	
	public String toString() {
		return "Lager [lagerartikel=" + lagerartikel + "]";
	}
	
	
	
	
}

Klasse LagerException
Java:
public class LagerException extends Exception
{
	String Modell;
    String meldung;
	
	private static final long serialVersionUID = 1L;
	
    

    public LagerException(String modell, String meldung) {
		super();
		Modell = modell;
		this.meldung = meldung;
	}



	public String toString() {
        return "***** Fehler bei Konto " + Modell + "\n***** " + meldung;
    }
}
 
Zuletzt bearbeitet von einem Moderator:
die Aufgabe ist in der Tat recht unklar, da kann sich jeder andere auch nur die Frage stellen,
ob dir wilde Spekulationen helfen oder du eher nachfragen solltest, sei dahingestellt,

möglich wäre, dass jeder Artikel eine toString()-Methode mit seinen Werten befüllt, auf diesen String bietet dann contains() gewisse Möglichkeiten,

------
Kleinigkeiten:

> lagerartikel.contains("Item 1")
für eine Liste von Objekten != String kann dagegen nicht funktionieren,

'lagerartikel' ist auch ein sehr schlechter Variablenname falls nicht vom Typ LagerArtikel, sofern es eine solche Klasse gibt!
nenne das doch 'artikelliste'

unangenehm fällt auch auf, dass du wiederholt Modell großgeschrieben als Variable hast,
Variablen unbedingt durchgehend klein schreiben (also erster Buchstabe klein, darf hinten auch Großbuchstaben haben),
sonst ja auch schon gut so gemacht
 
Was ich auch noch nicht so wirklich verstanden habe, ich möchte die Arraylist nach einem String, also nach Modell durchsuchen.
Im Moment ist es ja so, dass die Artikelliste nach "Item1" durchsucht werden, kann ich es auch so machen, dass man selbst einen Begriff eingibt nachdem man sucht? Wenn ja wie geht das?

Und nochmal zu Exception ich bekomme die Fehlermeldung "The Method getModell() is undefined for the type Lager" wenn ich die Exception werfe:

Java:
public void durchsuche(){
		  if (artikelliste.contains("Item 1")) {
	            System.out.println("True");
	        } else {
	        	throw new LagerException(getModell(),"Dieses Modell ist nicht vorhanden");
	        }
		
	}

In der Aufga steht ausdrücklich dass man nach der Modellbezeichnung suchen soll und wenn es die nicht gibt soll eine Exception geworfen werden die von einer eigenen Exceptionklasse kommt.
Das muss doch irgendwie gehen oder?
 
> Im Moment ist es ja so, dass die Artikelliste nach "Item1" durchsucht werden

dass das nicht gutgeht, schrieb ich ja schon

> kann ich es auch so machen, dass man selbst einen Begriff eingibt nachdem man sucht? Wenn ja wie geht das?

wie machst du das add() für einen neuen Artikel? der wird ja auch nicht 'Item1' sein, sondern eben ein Parameter,
variable Übergabe beliebiger Werte, hier genauso, Suchwort übergeben

wie der Aufrufer zu dem kommt ist ein weites Feld,
von der Konsole einlesen usw., das willst du hoffentlich nicht alles hier fragen

> Und nochmal zu Exception ich bekomme die Fehlermeldung "The Method getModell() is undefined for the type Lager" wenn ich die Exception werfe:

in diesem Fall musst du sicher nur den Suchbegriff, den Parameter, in die Exception geben, was sollte getModell() sein/ liefern?
allgemein ist das Problem wie gesagt ungeklärt,

solltest du an irgendeiner Stelle ein konkretes LagerArtikel-Objekt haben, dann könntest du höchstens da das Modell abfragen,
wenn auch kompliziert/ unschön, und nebenbei hat im Moment nichtmal die Klasse Stichsaege eine getModell()-Methode..
 
Ich hab es jetzt so gemacht aber das ist falsch, kannst du mir vielleicht ein bisschen praktischer helfen, ich kenne leider niemanden der Java kann und das sind so Kleinigkeiten an denen man ewig hängt wenn man nicht genau weiss wie es funktioniert.
Hier nochmal die Methode:

Java:
public void durchsuche(){
		  if (artikelliste.contains(String suchwort)) {
	            System.out.println("True");
	        } else {
	        	throw new LagerException(getModell(),"Dieses Modell ist nicht vorhanden");
	        }
		
	}
 
Hier nochmal die Methode:
Wie SlaterB schon schrieb kannst Du nur in [JAPI]String[/JAPI]-Listen mit
Code:
contains()
suchen.
Du musst schon in einer Schleife über die Listenelemente laufen und jedes Element fragen, ob es das Suchkriterium erfüllt.

Der von SlaterB vorgeschlagene Vergleich über Ausgabe von
Code:
toString()
ist recht einfach umsetzbar und für's erste ausreichend...

bye
TT
 
Java:
    public void setRegalNr() {
        this.regalNr = "Item1".length();
    }
vs
Java:
    public void setRegalNr(int regalNr) {
        this.regalNr = regalNr;
    }
erkennst du den Unterschied zwischen einer Methode ohne Parameter, die alles aus eigenem Wissen/ Code machen muss
und einer Methode mit Parameter?

was braucht es da Praxis, was kann es viel grundlegenderes geben als eine Methode mit Information von außen,
all die Konstruktoren, set-Methoden, überall wird etwas übergeben...

auch contains() dient als gutes Beispiel, was macht die ArrayList in ihrer Implementierung von contains(), Däumchen drehen, immer dasselbe suchen?
nein, auch dort wird ein Parameter benötigt, den den du hier an contains() zu übergeben versuchst

> if (artikelliste.contains(String suchwort)) {
sinnlos Wörter zusammenwerfen ist dann auch nicht wirklich eine Lösung,
es gibt doch eine gewisse Grundmenge an Java-Syntax, die zu beachten ist,
wie sieht ein Aufruf einer Methode aus usw., im Gegensatz zur Deklaration
 
Ich verstehe es nicht wirklich, was ich bräuchte wäre eine Beispiel einer funktionierenden durchsuche Methode.
Ich bin ja für eure Tipps dankbar aber ich glaube nicht dass ich so wirklich was lerne ich komme einfach nicht weiter da kann ich noch Stunden rumprobieren.
 
siehe auch mein Posting kurz zuvor, kann ja im anderen Thema weitergehen alsbald
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben