HashMap und die Methoden

Thisor

Bekanntes Mitglied
Moin!
Und zwar stehe ich vor der folgenden Situation:
Bei einer Auktion kann ein Kunde x viele Gebote abgeben, wobei die Summe des Gebots höher sein muss als das Gegenwärtige (quasi wie bei Ebay), ansonsten ist das Gebot nicht gültig. Kunden können per Filter von der Auktion ausgechlossen werden.

Ich habe eine HashMap erstellt und muss die Methoden ausimplementieren.
Die Anforderung für die add-Methode lautet:
Falls Gebot und Kunde gültig sind, werden sie gespeichert und true zurückgegeben, sonst false und Kunde wird ignoriert.

Mein Code:
Code:
    public boolean add(Customer c, double bidding) {

        if (map.containsKey(c) && map.containsValue(bidding)) {
            map.put(c, new BiddingList());
            filter.accept(c); 
            return true;

        }

        return false;
    }

Die Objekte werden im JUnit erstellt und überprüft:
Code:
    @Test
    public void testAdd1() {
        biddingCollector.add(c1, 0);
        int actual = biddingCollector.getNrOfCustomers();
        assertEquals(0, actual);
    }

    @Test
    public void testAdd2() {
        biddingCollector.add(c1, 1);
        biddingCollector.add(c1, 2);
        int actual = biddingCollector.getNrOfCustomers();
        assertEquals(1, actual);
undsoweiter..
    }

Wenn ich es laufen lasse, wird mir nur der erste Fall grün angezeigt, weil es nicht geaddet wird(?) Fehler lautet expected 1 but was 0, wobei "but was 0" auch auf den folgenden tests angezeigt wird.
 

Joose

Top Contributor
Du fügst nur etwas zur HashMap hinzu wenn es schon drinnen ist. Wie soll man nun erstmalig etwas hinzufügen? ;)

So kann ja nie ein 1.Gebot abgegeben werden oder?
 

Jardcore

Top Contributor
actual ist ein false friend, und heißt nicht aktuell ^^ benutze lieber current.
Zu deinen Tests, besser ist nicht die Anzahl zu prüfen, sondern zu prüfen was alles in der Map drin ist.
Java:
@Test
public void testAdd_addTwoCustomersWithBiddings_customersShouldBeInTheMap() {
    biddingCollector.add(c1, 1);
    biddingCollector.add(c2, 2);
    assertThat(map.containsKey(c1) && map.containsKey(c2), is(true));
}
 

Thisor

Bekanntes Mitglied
@Joose versteh ich nicht, dann muss ich ja schreiben wenn map.contains(object) == false, also wenn es noch nicht besteht, dann soll er das hinzufügen?

@Jardcore Ich darf nichts in der Testklasse umändern, ich soll bloß die Methoden ausimplementieren
 

Joose

Top Contributor
versteh ich nicht ...

Die Anforderung der add-Methode hast du ja schon beschrieben. Wenn Kunde UND Gebot gültig sind ....
Das Gebot ist gültig sofern es höher ist als das zuletzt abgegebene oder? -> wo in deinem Code kontrollierst du nun ob das Gebot gültig ist?
Wann ist ein Kunde gültig?

Java:
public boolean add(Customer c, double bidding) {    
    if (map.containsKey(c) && map.containsValue(bidding)) {
        map.put(c, new BiddingList());
        filter.accept(c);
        return true;
    }
    return false;
}
Was außerdem an diesem Code auffällt:
Du überprüfst ob bidding als Value in der Map vorkommt, fügst als Value dann aber eine Objekt von BiddingList hinzu. Welchen Type verwendest du denn nun für Value?
Außerdem erstellst du für den Kunden jedes mal eine neue BiddingList. Ich nehme eigentlich an es sollte die vorhandene ergänzt werden um das neue Gebot oder?
filter.accept(c) soll ja anscheinend kontrollieren ob der Kunde überhaupt berechtigt ist zu bieten. Wo wird das Ergebnis verarbeitet? Auch wenn er nicht berechtigt wäre, zur Map wurde der Kunde schon hinzugefügt und true wird ebenfalls zurückgegeben.
 

Thisor

Bekanntes Mitglied
Dann muss ich also kontrollieren, ob der Kunde erstmal überhaupt berechtigt ist. Und schauen ob das gebotene Gebot höher ist als das gegenwärtige.
Richtig, es soll um das neue Gebot ergänzt werden. Ich habe noch eine abstracte Klasse mit BiddingCollector:
Code:
public abstract class BiddingCollector {

    protected IFilter filter;

    public BiddingCollector(IFilter filter) {
        super();
        this.filter = filter;
    }

    public abstract int getNrOfCustomers();

    public abstract boolean add(Customer c, double bidding);

    public abstract double getHighestBidding();

    public abstract int getNrOfBiddings(Customer c);

    public abstract List<Double> getBiddings(Customer c);

    public abstract Customer getHighestBidder();

}
und mit der weiß ich noch nicht so ganz was ich anfangen soll.
 

Jardcore

Top Contributor
Pseudocode:
Java:
add(Customer c, double bidding) {
    if(bidding > getHighestBidding()) {
       map.put(c, bidding);
       return true;
    }
    return false
}
Es ist egal ob der Typ schon in der Map ist oder nicht, solange er das höchste Gebot abliefert.

Keine Ahnung was BiddingList ist, hast du ja noch nicht mit uns geteilt^^ deswegen hier einfach eine Map<Customer, Double>. Was die accept(...) Methode macht, ist bisher auch noch nicht bekannt, deswegen habe ich die weggelassen. Wenn du mehr Infos liefert, wird die Lösung auch detaillierter :p
 

Thisor

Bekanntes Mitglied
alright, here we go
BiddingList:
Java:
public class BiddingList extends ArrayList<Double> {

    public BiddingList() {
        super();
        // TODO Auto-generated constructor stub
    }

    public BiddingList(Collection<? extends Double> c) {
        super(c);
        // TODO Auto-generated constructor stub
    }

    public BiddingList(int initialCapacity) {
        super(initialCapacity);
        // TODO Auto-generated constructor stub
    }

    public double max() {
        double m = 0;
        for (Double d : this) {
            if (m < d) {
                m = d;
            }
        }
        return m;
    }

}
Java:
public interface IFilter {
    boolean accept(Customer c);
}
Java:
public class Customer {

    private int id;
    private String surname;
    private String forename;
    private String street;
    private String city;
    private String zipCode;
    private String country;
    private int yearOfBirth;
    private int degree;

    public Customer(int id, String surname, String forename, String street, String city, String zipCode,
            String country, int yearOfBirth, int degree) {
        super();
        this.id = id;
        this.surname = surname;
        this.forename = forename;
        this.street = street;
        this.city = city;
        this.zipCode = zipCode;
        this.country = country;
        this.yearOfBirth = yearOfBirth;
        this.degree = degree;
    }

    /**
     * @return the surname
     */
    public String getSurname() {
        return surname;
    }

    /**
     * @param surname
     *            the surname to set
     */
    public void setSurname(String surname) {
        this.surname = surname;
    }

    /**
     * @return the forename
     */
    public String getForename() {
        return forename;
    }

    /**
     * @param forename
     *            the forename to set
     */
    public void setForename(String forename) {
        this.forename = forename;
    }

    /**
     * @return the street
     */
    public String getStreet() {
        return street;
    }

    /**
     * @param street
     *            the street to set
     */
    public void setStreet(String street) {
        this.street = street;
    }

    /**
     * @return the city
     */
    public String getCity() {
        return city;
    }

    /**
     * @param city
     *            the city to set
     */
    public void setCity(String city) {
        this.city = city;
    }

    /**
     * @return the zipCode
     */
    public String getZipCode() {
        return zipCode;
    }

    /**
     * @param zipCode
     *            the zipCode to set
     */
    public void setZipCode(String zipCode) {
        this.zipCode = zipCode;
    }

    /**
     * @return the country
     */
    public String getCountry() {
        return country;
    }

    /**
     * @param country
     *            the country to set
     */
    public void setCountry(String country) {
        this.country = country;
    }

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @return the yearOfBirth
     */
    public int getYearOfBirth() {
        return yearOfBirth;
    }

    /**
     * @return the degree
     */
    public int getDegree() {
        return degree;
    }

    /**
     * @param degree
     *            the degree to set
     */
    public void setDegree(int degree) {
        this.degree = degree;
    }

    /*
     * (non-Javadoc)
     *
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Customer) {
            Customer c = (Customer) obj;
            return c.getId() == this.id;
        }
        else
            return false;
    }

    /*
     * (non-Javadoc)
     *
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
        return (((Integer) this.id).hashCode());
    }

}

und im unitcase steht noch zur Filter
Java:
private class FilterX implements IFilter {

        @Override
        public boolean accept(Customer c) {
            return (!(c.getId() == 666));
        }
    }
 
Zuletzt bearbeitet von einem Moderator:

Flown

Administrator
Mitarbeiter
Kannst du mal deine ganze Aufgabenstellung hier posten. Das hier sieht einfach nur verkehrt aus. BiddingList extends ArrayList<Double> wirklich?
 

Jardcore

Top Contributor
BiddingList ist selbst erstellt? Oder vorgegeben? Ich war ja auch mal Fan vom Erben von Collections... aber oftmals brauchst du nicht die ganze Funktionalität.
Java:
public class BiddingList {
    private List<Double> list;

    public BiddingList() {
        list = new ArrayList<Double>();
    }

    public double max() {
        double m = 0;
        for (Double d : list) {
            if (m < d) {
                m = d;
            }
        }
        return m;
    }
}
Wäre deutlich schlanker.

Ich verstehe jetzt vielleicht etwas besser wie deine Methode funktionieren soll.
Jeder Customer soll alle seine Gebote wissen?

Wie sieht eigentlich deine Map aus?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N HashMap methoden Java Basics - Anfänger-Themen 8
S HashMap mehrere Keys zu einem Value Java Basics - Anfänger-Themen 3
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
krgewb HashMap Java Basics - Anfänger-Themen 2
B Hashmap richtig bauen, die Tripel auf Zahl abbildet? Java Basics - Anfänger-Themen 10
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
berserkerdq2 Hashmap, wie prüfe ich ob ein Key schon existiert Java Basics - Anfänger-Themen 19
S Durch HashMap iterieren Java Basics - Anfänger-Themen 8
rafi072001 Sortieren einer HashMap nach Values Java Basics - Anfänger-Themen 2
F gson mit einer Hashmap Java Basics - Anfänger-Themen 2
J JSON-HashMap Java Basics - Anfänger-Themen 3
J Hashmap Java Basics - Anfänger-Themen 13
C Hashmap zickt Java Basics - Anfänger-Themen 9
S HashMap contains() Methode Java Basics - Anfänger-Themen 1
Z Satz aufteilen und die Wörter zählen (HashMap) Java Basics - Anfänger-Themen 15
N enum Attribut von Objekten einer Hashmap ausgeben Java Basics - Anfänger-Themen 6
P Verschachtelte Hashmap Java Basics - Anfänger-Themen 6
I Sortiert eine HashMap nicht gleich wie eine ArrayList? Java Basics - Anfänger-Themen 1
B HashMap alphabetisch sortieren Java Basics - Anfänger-Themen 2
J HashMap Java Basics - Anfänger-Themen 6
M Enum-Variable HashMap zuweisen Java Basics - Anfänger-Themen 5
U Hashmap Iterator selbst implementieren Java Basics - Anfänger-Themen 10
N HashMap in List good practice? Java Basics - Anfänger-Themen 2
K Value eines HashMaps in einer HashMap wiedergeben. Java Basics - Anfänger-Themen 5
O Hashmap, ArrayList, LinkedList Java Basics - Anfänger-Themen 7
O HashMap - ArrayList Java Basics - Anfänger-Themen 29
J Hashmap langsamer als compareTo? Java Basics - Anfänger-Themen 23
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
J Erhöhen eines Values als Integer bei gleichen Keys in HashMap Java Basics - Anfänger-Themen 12
N Methoden HashMap interne Werte miteinander vergleichen Java Basics - Anfänger-Themen 7
W The type Long is not visible HashMap Java Basics - Anfänger-Themen 4
M Objekt mit Hashmap vergleichen Java Basics - Anfänger-Themen 22
S Gibt es für die Klasse HashMap Generic Implementierungen? Java Basics - Anfänger-Themen 11
C HashMap - alle keys haben values der letzten put-Anweisung Java Basics - Anfänger-Themen 3
J Hashmap auslesen Java Basics - Anfänger-Themen 7
F HashMap sortieren <String, Long> Java Basics - Anfänger-Themen 3
GreenTeaYT HashMap dupliziert meine Elemente? Java Basics - Anfänger-Themen 2
shiroX Methoden Morse-Code Übersetzer mit HashMap Java Basics - Anfänger-Themen 5
E HashMap Problem Java Basics - Anfänger-Themen 5
P Hashmap anstatt LinkedList? Java Basics - Anfänger-Themen 6
N Methoden Interaktives PDF mit HashMap befüllen Java Basics - Anfänger-Themen 0
Z Hashmap auseinandernehmen und analysieren Java Basics - Anfänger-Themen 7
B Durchlaufen von Hashmap und Arraylist Java Basics - Anfänger-Themen 8
F HashMap oder welches Array? Java Basics - Anfänger-Themen 4
T HashMap Java Basics - Anfänger-Themen 24
L Hashmap mit variablem Key Java Basics - Anfänger-Themen 9
M Collections Probleme mit Hashmap Java Basics - Anfänger-Themen 4
N Collections String in HashMap umwandeln Java Basics - Anfänger-Themen 3
Z HashMap richtig benutzen Java Basics - Anfänger-Themen 2
lgund HashMap // TS3 Query Java Basics - Anfänger-Themen 7
Z Hashmap Iterator löscht nicht Java Basics - Anfänger-Themen 8
E Hashmap Wert auslesen Java Basics - Anfänger-Themen 2
S Printstream für einen Hashmap Loop Java Basics - Anfänger-Themen 1
dat_vin OOP Hashmap und Attribute Java Basics - Anfänger-Themen 7
C Check ob eine HashMap schon existiert Java Basics - Anfänger-Themen 16
P Vererbung Eigene HashMap Variante Java Basics - Anfänger-Themen 2
R Hashmap in anderer Klasse nicht benutzbar Java Basics - Anfänger-Themen 1
T Java Hashmap Java Basics - Anfänger-Themen 3
L Gibt es etwas wie "HashMap <String, String, String> Java Basics - Anfänger-Themen 9
K HashMap mit Daten aus ArrayList befüllen Java Basics - Anfänger-Themen 14
S OOP Klasse mit static-Eigenschaften - HashMap füllen Java Basics - Anfänger-Themen 6
O HashMap Fragen Java Basics - Anfänger-Themen 8
T HashMap Werte einfügen, durchsuchen und auslesen Java Basics - Anfänger-Themen 17
M Semantisches Problem HashMap/Netzwerk Java Basics - Anfänger-Themen 4
D HashMap Keys durchlaufen Java Basics - Anfänger-Themen 2
B Zugriff auf csv-Datei per hashmap Java Basics - Anfänger-Themen 5
M HashMap keys ausgeben Java Basics - Anfänger-Themen 2
S In einer Hashmap Klassen regestrieren Java Basics - Anfänger-Themen 2
H Collections Was ist schneller - HashMap + Sort v TreeMap? Java Basics - Anfänger-Themen 75
F HashMap nach kleinstem Value durchsuchen Java Basics - Anfänger-Themen 11
G HashMap Java Basics - Anfänger-Themen 6
F Wortpaare - HashMap - ArrayList Java Basics - Anfänger-Themen 6
M HashMap Frage Java Basics - Anfänger-Themen 3
M HashMap - put() reagiert nicht? Java Basics - Anfänger-Themen 8
N Cast eines Objektes in eine Hashmap Java Basics - Anfänger-Themen 13
A CSV Zeilenweise einlesen und in einer HashMap speichern Java Basics - Anfänger-Themen 12
A Input/Output Hashmap in einem JPanel via JList anzeigen Java Basics - Anfänger-Themen 8
K HashMap auf leere Key-Value-Paare prüfen Java Basics - Anfänger-Themen 14
F Hilfe bei der HashMap. Java Basics - Anfänger-Themen 3
F HashMap vs. TreeMap Java Basics - Anfänger-Themen 5
B HashMap Java Basics - Anfänger-Themen 9
C Collections String[] als value in HashMap Java Basics - Anfänger-Themen 6
V Hashmap Iterieren Java Basics - Anfänger-Themen 4
C Csv File in Hashmap ausgeben Java Basics - Anfänger-Themen 14
T HashMap<String,Object> Werte auslesen Java Basics - Anfänger-Themen 5
I HashMap sortieren Java Basics - Anfänger-Themen 10
I HashMap Java Basics - Anfänger-Themen 11
H Collections Brauche modifizierte HashMap Java Basics - Anfänger-Themen 6
H TreeMap/HashMap synchronisieren Java Basics - Anfänger-Themen 2
A Datentypen Hashmap to Array Java Basics - Anfänger-Themen 11
D HashMap überschreibt Werte Java Basics - Anfänger-Themen 7
pg1337 Interface Comparable-Interface bei HashMap Java Basics - Anfänger-Themen 21
D erweiterte hashmap Java Basics - Anfänger-Themen 5
H HashMap<Int, String> - Er findet die Int-Klasse nicht. Java Basics - Anfänger-Themen 3
L HashMap zu JList Java Basics - Anfänger-Themen 6
S Erste Schritte HashMap Kurze Frage - Werte über Schleife ausgeben Java Basics - Anfänger-Themen 30
F Collections ArrayList oder Hashmap mittel Collections.sychronised Java Basics - Anfänger-Themen 6
B Klassen HashMap Zwei Objekte, gleicher Key Java Basics - Anfänger-Themen 4
N HashMap fehlerhafte Rückgabe Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben