JAVA Klassenmethoden- Methoden aufrufen und neue Werte abspeichern. Aber wie?
Ich brauche bei dem untersten Code Hilfe, weiss leider nicht wo mein Fehler ist..
AufgabenstellungDu implementierst eine Plattform, in der Artikel versteigert werden können. Zum Speichern eines Artikels verwendest du die folgende Klasse:
public class Artikel {
public String name;
public int preis = 0;
public int gebote = 0;
public Artikel(String name, int preis) {
this.name = name;
this.preis = preis;
}
}
Das Attribut name enthält die Beschreibung des Artikels. Das Attribut preis enthält zu Beginn das Mindestgebot und später das bisher höchste Gebot. Die Attribute name und preis werden beide über den Konstruktor gesetzt. Im Attribut gebote wird die Anzahl gültiger Gebote gespeichert. Zu Beginn enthält das Attribut den Wert 0. Ein Gebot ist gültig, wenn eine der folgenden Bedingungen erfüllt ist:
- Wenn noch kein Gebot abgegeben wurde und der gebotene Betrag mindestens gleich hoch ist wie das Mindestgebot.
Wenn das Gebot höher ist als das bisher höchste Gebot.
Ergänze die Methode so dass sie prüft, ob das übergebene Gebot gültig ist. Bei einem ungültigen Gebot soll nichts gemacht werden. Bei einem gültigen Gebot soll der Preis des Artikels angepasst und die Anzahl gültiger Gebote um eins erhöht werden.
Die Main-Klasse enthält Tests für drei Artikel. Schau dir die Tests an. Wenn du die Methode wie beschrieben erweitert hast, sollte das Programm die folgende Ausgabe machen:
Schrank: Gebote: 0, Preis: 100
Bett: Gebote: 2, Preis: 161
Stuhl: Gebote: 3, Preis: 30
Mein Code sieht folgendermassen aus:
Main Class:
public class Main {
public static void main(String[] args) {
// In dieser Klasse keine Änderungen machen
Artikel a = new Artikel("Schrank", 100);
Artikel b = new Artikel("Bett",150);
Artikel c = new Artikel("Stuhl", 20);
a.biete(99); // ungültig (Preis unter Minimum)
b.biete(160);
b.biete(159); // ungültig (Preis unter höchstem Gebot)
b.biete(161);
c.biete(20);
c.biete(23);
c.biete(23); // ungültig (Preis gleich hoch wie höchstes Gebot)
c.biete(30);
System.out.println(a.name+": Gebote: "+a.gebote+", Preis: "+a.preis);
System.out.println(b.name+": Gebote: "+b.gebote+", Preis: "+b.preis);
System.out.println(c.name+": Gebote: "+c.gebote+", Preis: "+c.preis);
}
}
Klasse Artikel:
public class Artikel {
public String name; //Beschreibung des Artikels
public int preis = 0; // enthält erst das Mindestangebot und später das Höchstgebot
public int gebote = 0;
public Artikel(String name, int preis) {
this.name = name;
this.preis = preis;
}
public void biete(int gebot) {
// TODO: Methode implementieren
while ((gebote==0 && gebot>preis) || (gebote>0 && gebot>preis)){
if ((gebote==0) && (gebot>=preis)) {
artikel.preis==gebot;
gebote++;
}
if (gebote>0 && (preis>gebot){
preis==gebot;
gebote++;
}
}
}
}
2 Antworten
Wozu brauchst du in deiner biete Funktion eine Schleife? Du hast keinen Iterable Datentyp wie z.B. eine Liste oder Array.
In deiner Artikel Klasse hast du die Variable Preis welche entweder den Startpreis oder den Preis des hochsbietenden darstellt. Das ist ein Wert, der immer überschrieben wird.
Die Variable Gebote stellt die Anzahl der Gebote dar. Es ist keine Liste, wo alle bisherigen Gebote gespeichert werden.
In deinem Code gibt es zwei Fehler.
Zum Einen musst du die while Schleife komplett entfernen. Du brauchst die Schleife nicht.
Bei deinem zweiten if hast du ein Syntax Fehler. Alle Klammern werden nicht korrekt geschlossen.
Ich sehe manche Dinge, die entweder zu viel sind und ebenfalls noch den/die Fehler.
public class Artikel {
public String name; //Beschreibung des Artikels
public int preis = 0; // enthält erst das Mindestangebot und später das Höchstgebot
public int gebote = 0;
public Artikel(String name, int preis) {
this.name = name;
this.preis = preis;
}
public void biete(int gebot) {
if (gebot>=preis) {
preis = angebot;
gebote++;
}
}
}
// == ist zum Vergleichen; = ist zum Setzen von Variablen
Die Schleife ist irrelevant, da ja immer nur 1 Angebot pro Funktionsaufruf evaluiert werden muss. Prinzipiell musst du ja nur schauen, ob das Gebot größer als der Preis ist; du musst also nicht erst überprüfen, ob gebote größer als 0 ist, da das ja nur zählen soll und nicht für die Evaluierung notwendig ist.
Wenn ich die Aufgabe richtig verstanden habe.
Das wichtigste ist, dass du es verstanden hast. Hast du es verstanden?
ja habe es nun verstanden und meine code auch verändert entsprechend angepasst :P
Folgendermassen hat es perfekt geklappt:
public void biete(int gebot) {
// TODO: Methode implementieren
if ((gebote<=0 && gebot>=preis) || (gebote>0 && gebot>preis)){ // sollte richtig sein
preis=gebot;
gebote++;
}
}
}
Sehr gut. Da gebote nicht kleiner als 0 werden kann, könntest du auch gebote==0 schreiben, statt gebote<=0, aber es ist kein Fehler!
lieben Dank! :) bist der Beste/die Beste!! :)