Guten Abend euch Allen,
**
-
abstrakte Klasse Artikel
Diese Klasse soll als abstrakte Klasse deklariert werden. Die Klasse soll private Instanzvariablen zum Speichern der Marke, des Namens, der Version, des Startpreises (in Euro) und aller Gebote (in Euro) sowie entsprechende Zugriffsmethoden besitzen. Eine Methode getHoechstesGebot() soll das höchste Gebot auf einen Artikel zurückliefern.*
Zusätzlich soll es eine konkrete Methode getPreis() geben, die den Preis den ein Bieter auf einen Artikel zahlen muss, berechnet. Der Preis eines Artikels wird an Hand des höchsten Gebots minus einem Rabatt wie folgt berechnet: Für Software erhält man einen Rabatt, der von der Anzahl der abgegebenen Gebote abhängt (pro Gebot einen Rabatt von 1%, höchstens 10%), während man für einen Computer einen Rabatt abhängig von der Austattung bekommt (10% Grundrabatt minus 1% pro angegebenen Ausstattungspaket - abhängig vom höchsten Gebot). Zu diesem Zweck soll eine abstrakte Methode getRabatt() zur abstrakten Klasse Artikel hinzugefügt und innerhalb von getPreis() verwendet werden.* -
Klassen Software und Computer
Es sollen zwei konkrete (nicht-abstrakte) Unterklassen Software und Computer von der abstrakten Klasse Artikel abgeleitet werden. Die Unterklasse Computer hat zusätzliche Instanzvariablen für Prozessor, Arbeitsspeicher, und Austattung sowie entsprechende Zugriffsmethoden. Die Ausstattung soll in einem String-Array gespeichert werden. Die Unterklasse Software hat eine zusätzliche Instanzvariable für die Sparte sowie eine entsprechende Zugriffsmethode. Beide Klassen sollen die Methode getRabatt() implementieren. Implementieren Sie zusätzlich die Methode toString() in geeigneter Art und Weise (Ausgabe aller Attribute)
**
Ich muss nicht 100% auf diese Aufgabestelung halten. Ich möchte möglichst sinnvoll programmieren und an die Ratschläge halten was ich vorher in Forum bekommen habe
@Klasse Artikel.java - Ich habe setter Methoden desswegen nicht implementiert, weil man mir hier gesagt hat, dass ich nur dann implementieren soll, wenn die Instanze veränderbar sind, ausser bids. Sollte setter Methode von bids machen ?
public abstract class Artikel {
private String marke;
private String name;
private String version;
private double startpreis;
private List<Double> bids;
public Artikel(String marke, String name, String version,
double startpreis, List<Double> bids) {
this.marke = marke;
this.name = name;
this.version = version;
this.startpreis = startpreis;
this.bids = bids;
}
String getMarke() {
return marke;
}
String getName() {
return name;
}
String getVersion() {
return version;
}
double getStartpreis() {
return startpreis;
}
List<Double> getBids() {
return bids;
}
public double hoechsteBid() {
double bid = 0;
Iterator<Double> bidIter = bids.iterator();
while (bidIter.hasNext()) {
if (bid < bidIter.next()) {
bid = bidIter.next();
}
}
return bid;
}
public void setzeBid(double bid){
this.bids.add(bid);
}
public abstract double rabat();
public double getPreis() {
return hoechsteBid() - rabat();
}
}
@Software.java - braucht man für Sparte setter methode. Wie ich verstanden habe Sparte ist eine Beschreibung und Beschreibung ändert man auch nicht oder?
public class Software extends Artikel {
private String sparte;
public Software(String marke, String name, String version,
double startpreis, List<Double> bids, String sparte) {
super(marke, name, version, startpreis, bids);
this.sparte = sparte;
}
String getSparte() {
return sparte;
}
public double rabat() {
double rabat = 0;
if (getBids().size() < 10) {
rabat = getStartpreis() * getBids().size() * 0.01;
} else {
rabat = getStartpreis() * getBids().size() * 0.1;
}
return rabat;
}
@Override
public String toString() {
StringBuilder bidsBuilder = new StringBuilder();
Iterator<Double> iter = getBids().iterator();
while (iter.hasNext()) {
bidsBuilder.append(iter.next()).append(", ");
}
return "Name - " + getName() + "
" + "Marke - " + getMarke() + "
"
+ "Version - " + getVersion() + "
" + "Sparte - "
+ getSparte() + "
" + bidsBuilder.toString() + "
"
+ "Preis - " + getPreis();
}
}
@Computer- es macht schon sinn setter Methoden von Prozessor und Arbeitspeicher zu machen oder?
Sollte ich setter für aussstatung machen oder public void ausstattunHinzufuegen(String ausstatung)
methode wäre sinnvoller?
public class Computer extends Artikel {
private String prozessor;
private int arbeitsspeicher;
private List<String> ausstattung;
public Computer(String marke, String name, String version,
double startpreis, List<Double> bids, String prozessor,
int arbeitsspeicher, List<String> ausstattung) {
super(marke, name, version, startpreis, bids);
setProzessor(prozessor);
setArbeitsspeicher(arbeitsspeicher);
this.ausstattung = ausstattung;
}
String getProzessor() {
return prozessor;
}
void setProzessor(String prozessor) {
this.prozessor = prozessor;
}
int getArbeitsspeicher() {
return arbeitsspeicher;
}
void setArbeitsspeicher(int arbeitsspeicher) {
this.arbeitsspeicher = arbeitsspeicher;
}
List<String> getAusstattung() {
return ausstattung;
}
public void ausstattunHinzufuegen(String ausstatung) {
this.ausstattung.add(ausstatung);
}
public double rabat() {
return hoechsteBid() * 0.1 - ausstattung.size() * 0.01;
}
@Override
public String toString() {
StringBuilder ausstatungBuilder = new StringBuilder();
Iterator<String> austatungIter = ausstattung.iterator();
while (austatungIter.hasNext()) {
ausstatungBuilder.append(austatungIter.next()).append(", ");
}
StringBuilder bidsBuilder = new StringBuilder();
Iterator<Double> bidsIter = getBids().iterator();
while (bidsIter.hasNext()) {
bidsBuilder.append(bidsIter.next()).append(", ");
}
return "Marke - " + getMarke() + "
" + "Name - " + getName() + "
"
+ "Version - " + getVersion() + "
" + "Prozessor - "
+ getProzessor() + "
" + "Arbeitspeicher - "
+ getArbeitsspeicher() + "
" + "Ausstatung - "
+ ausstatungBuilder.toString() + "
" + "Bids - "
+ bidsBuilder.toString() + "
" + "Preis - " + getPreis();
}
}
Allerletzte Frage : Ihr habt mir empfohlen statt ArrayList List zu nehmen. Ich wollte nur schauen wie genau StringBuilder Arbeitet und eine Test.java Klasse geschrieben und ich konnte nicht Instanz von List ausstattung erzeugen. Ich meine das mit new
Lg Anni