Logistiksystem Methode equals und hashcode

Bitte aktiviere JavaScript!
Logistiksystem Methode equals und hashcode


Hallo Guten Tag,

Kann mir jemand bitte hier weiter Helfen, und zwar komme ich nicht darauf wie es lösen sollte, . Ich hoffe das ihr es lesen könnt, wenn nicht kann mir jemand bitte sagen wie ich es am besten den Code schreiben soll.


lG
louis




In dieser Aufgabe werden Sie das bekannte Logistiksystem weiter ausbauen und einen Zustellungsalgorithmus implementieren. Entsprechend der Jahreszeit stellt ein Weihnachtsmann die Lieferungen zu und Straßen müssen nicht berücksichtigt werden.

Aufgabe 6.1 – DeliveryManager & Delivery Importieren dazu zunächst das Projekt „Aufgabe 6 - Logistics“ in Ihren Workspace. Für den Zustellungsalgrithmus müssen die Klassen DeliveryManager und Delivery zunächst erweitert werden. Implementieren Sie als erstes die Methode removeDelivery() in der Klasse DelieryManager. Die Methode soll eine gegebene Lieferung im Array der registrierten Lieferungen suchen und diese aus dem Array entfernen. Wird die gegebene Lieferung nicht gefunden, soll null zurückgegeben werden. Wird die Lieferung gefunden, soll das entsprechende Element im Array auf null gesetzt werden und die entfernte Lieferung soll zurückgegeben werden. Für das Suchen und Vergleichen von Lieferungen müssen Sie, je nach Lösungsansatz, die Methoden equals() und/oder hashCode() in der Klasse Delivery überschreiben

Code:
package de.tuberlin.mcc.prog1.logistics;
import java.awt.Dimension;
import de.tuberlin.mcc.prog1.logistics.deliveries.Delivery;
public class DeliveryManager {
   
    /**
     * Dimension of map
     */
    Dimension dim = new Dimension(100, 100);
   
    /**
     * Registered deliveries
     */
    Delivery[] deliveries = new Delivery[0];
    /**
     * Available locations
     */
    static Location[] locations =  LogisticsManager.locations;
   
    /**
     * Registers given deliveries
     * @param delivery
     * @param deliveries - deliveries to register
     * @return
     * @return
     */
   
    Object removeDelivery(int[] delivery){
   
        for(int i = 0; i <delivery.length;i++) {
            if(delivery[i] = null) {
                return null;
            }else if (deliveries[i]) {
                delivery[i] = 0;
                return     delivery[i];
            }
        }
       
       
       
    }
   
   
   
    public void registerDeliveries(Delivery... deliveries) {     // hier habe ich es versucht :/
        if (deliveries == null || deliveries.length == 0) {
            return;
        }
        Delivery[] oldDeliveries = this.deliveries;
        Delivery[] newDeliveries = new Delivery[oldDeliveries.length + deliveries.length];
       
        for (int i = 0; i < newDeliveries.length; i++) {
            if (i < oldDeliveries.length) {
                newDeliveries[i] = oldDeliveries[i];
            } else {
                newDeliveries[i] = deliveries[i-oldDeliveries.length];
            }
        }
        this.deliveries = newDeliveries;
       
        //Remove leading null values in this.deliveries here       
    }
   
    /**
     * Removes a given Delivery from registered deliveries
     * @param delivery - delivery to remove
     * @return deleted delivery or null (if given delivery wasn't in array)
     */
    public Delivery removeDelivery(Delivery delivery) {
        return null;
    }
   
    /**
     * Counts registered deliveries for location with given locationID
     * (sender ID of delivery equals locationID)
     * @param locationID - locationID of sender
     * @return number of deliveries at given location
     */
    public int countDeliveriesForLocation(int locationID) {
        return 0;
    }
   
    /**
     * Updates the receiver of a delivery by location id.
     * @param index - Index position of delivery
     * @param locationId - Id of location
     */
    void setReceiverForDelivery(int index, int locationId) {
        if (index >= 0 && index < deliveries.length) {
            Location receiver = getLocationById(locationId);
            if (receiver != null) deliveries[index].setReceiver(receiver);
        }
    }
   
    /**
     * Searches in Location[] locations (see above) for a location with given ID.
     * @param id - Id of location to look up
     * @return location with given id or null if there is no such location
     */
    public static Location getLocationById(int id) {
        for (Location l : locations) {
            if (l != null && l.getId() == id) {
                return l;
            }
        }
        return null;
    }   
   
    /**
     * Prints all registered deliveries.
     */
    public void printDeliveries() {
        System.out.println("Registered Deliveries:");
        for (int i = 0; i < deliveries.length; i++) {
            if (deliveries[i] != null) {
                System.out.println("[" + i + "]: " + deliveries[i].toString());
            }
        }
    }
   
    /**
     * Returns array of locations
     * @return array of locations
     */
    public Location[] getLocations() {
        return locations;
    }
   
    /**
     * Returns registered deliveries
     * @return array with registered deliveries
     */
    public Delivery[] getDeliveries() {
        return deliveries;
    }
   
    /**
     * Returns dimension of map
     * @return dimension of map
     */
    public Dimension getDimension() {
        return dim;
    }
}

Hier ist die Klasse Delivery. Was gneau soll ich hier Überschreiben ?

Code:
package de.tuberlin.mcc.prog1.logistics.deliveries;
import de.tuberlin.mcc.prog1.logistics.Location;
public class Delivery {
   
    /**
     * Delivery speed.
     */
    static final int SPEED = 1000;
    /**
     * Sender of Delivery.
     */
    private Location sender;
   
    /**
     * Receiver of delivery.
     */
    private Location receiver;
   
    /**
     * Time of creation.
     */
    private long date = System.currentTimeMillis();
   
    /**
     * Weight of delivery.
     */
    private final double weight;
   
    /**
     * Postage in cents.
     */
    protected int postage;
   
    /**
     * Returns the receiver of delivery
     * @return receiver of delivery
     */
    public Location getReceiver() {
        return receiver;
    }
   
    /**
     * Updates the receiver of delivery
     * @param receiver - new receiver
     */
    public void setReceiver(Location receiver) {
        if (receiver != null) {
            this.receiver = receiver;
            System.out.println("Updated receiver to " + receiver.getName());
        }
    }
   
    /**
     * Returns the weight of delivery
     * @return weight of delivery
     */
    public double getWeight() {
        return weight;
    }
   
    /**
     * Returns the sender of delivery
     * @return sender of delivery
     */
    public Location getSender() {
        return sender;
    }
   
    /**
     * Returns the creation time of delivery
     * @return creation time of delivery
     */
    public long getDate() {
        return date;
    }
   
    /**
     * Returns the postage of delivery in cents
     * @return postage of delivery in cents
     */
    public int getPostage() {
        return postage;
    }
   
    /**
     * Creates a delivery
     * @param sender - sender of delivery
     * @param receiver - receiver of delivery
     * @param weight - weight of delivery
     */
    protected Delivery(Location sender, Location receiver, double weight) {
        this.sender = sender;
        this.receiver = receiver;
        this.date = System.currentTimeMillis();
        this.weight = weight;
    }
   
    /**
     * Returns the estimated delivery time
     * @return estimated delivery time
     */
    public long getEstimatedDeliveryTime() {
        return this.date + getEstimatedDeliveryPeriod();
    }
   
    @Override
    public String toString() {
        long time = getEstimatedDeliveryTime() - System.currentTimeMillis();
        if (time < 0) {
            time = 0;
        }
        return "from " + sender.getName() + " to " + receiver.getName()
        + ", " + weight + "kg, arrival in " + time + "ms";
    }
   
    /**
     * Calculates the estimated delivery period in ms
     * @return delivery period in ms
     */
    private long getEstimatedDeliveryPeriod() {
        return (long) getDistance() * SPEED;
    }
   
    /**
     * Calculates the distance between sender and receiver.
     * @return distance between sender and receiver
     */
    private double getDistance() {
        int xdiff = sender.getxPosition() - receiver.getxPosition();
        xdiff = Math.abs(xdiff);
        int ydiff = sender.getyPosition() - receiver.getyPosition();
        ydiff = Math.abs(ydiff);
        return Math.sqrt(xdiff * xdiff + ydiff * ydiff);       
    }
}
 
A

Anzeige




Vielleicht hilft dir unser Java-Tutorial hier weiter —> (hier klicken)
Jedes Object (also auch Delivery) besitzt eine equals und hashcode Methode. Damit kann man bestimmen, wann 2 Objekte als gleich gelten. Diese musst du mit einer passenden Logik überschreiben.

Beispiele dazu gibt es zu Haufe im Netz und du musst dir jetzt nur noch überlegen, wann zwei Deliveries als gleich zu betrachten sind
 
Hallo Leute vielen Dank erstmal für die Antworten !!

Java:
if (season != Seasons.WINTER) {
    throw new SantaUnavailableException();
}
SCNR :p
:D :D Ich glaube das kommt erst später.

Jedes Object (also auch Delivery) besitzt eine equals und hashcode Methode. Damit kann man bestimmen, wann 2 Objekte als gleich gelten. Diese musst du mit einer passenden Logik überschreiben.

Beispiele dazu gibt es zu Haufe im Netz und du musst dir jetzt nur noch überlegen, wann zwei Deliveries als gleich zu betrachten sind
Ich habe das folgender maßen versucht.
Das sind equals und hash code automatisch erzeugt.
Code:
    /* (non-Javadoc)
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        long temp;
        temp = Double.doubleToLongBits(weight);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        return result;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Delivery other = (Delivery) obj;
        if (Double.doubleToLongBits(weight) != Double.doubleToLongBits(other.weight))
            return false;
        return true;
    }
}
Und das ist remove Delivery
Code:
Object removeDelivery(int[] delivery){
       
        for(int i = 0; i <delivery.length;i++) {
           
           
            if(  delivery.equals(deliveries)) {
                delivery[i] = 0;
                return     delivery[i];
            }else
                return null;
            }
        return delivery;
        }
 
Ich denke, dass mit den IOTools die Lieferung die gesucht werden soll, erstmal eingeben werden. Wenn die Lieferung nicht existiert dann soll Null zurückgegeben werden. Wenn die Lieferung existiert und dann das entsprechende Element im Array auf null gesetzt werden (Sie wird damit entfernt) und die entfernte Lieferung soll zurückgegeben werden.
 
Sorry aber der Code ist für die Tonne. Der Kommentar passt nicht zur Methode, im if machst Du eine Zuweisung und keinen Vergleich, dann prüfst Du einmal das übergebene Array und einmal die Instanzvariable ab, letztere ohne Boole'schen Ausdruck, außerdem ist nach wie vor unklar, warum Du ein Array übergibst, wenn der Methodenname auf Einzahl hindeutet.

Ich vermute, Du willst eigentlich folgendes:
Java:
public Delivery removeDelivery(int index) {
    Delivery found = deliveries[index];
    if (found != null) {
        deliveries[index] = null;
    }
    return found;
}
 
In der Aufgabenstellung steht am ende : Für das Suchen und Vergleichen von Lieferungen müssen Sie, je nach Lösungsansatz, die Methoden equals() und/oder hashCode() in der Klasse Delivery überschreiben.


Code:
/* (non-Javadoc)
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        long temp;
        temp = Double.doubleToLongBits(weight);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        return result;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Delivery other = (Delivery) obj;
        if (Double.doubleToLongBits(weight) != Double.doubleToLongBits(other.weight))
            return false;
        return true;
    }
}
 
Naja, Du sagst: zwei Lieferungen sind gleich, wenn ihr Gewicht gleich ist.

Stell Dir vor, ich zeige Dir einen Brief von einem Telekommunikationsanbieter an Franz. Der ist auf Kopierpapier 80 g/m² gedruckt und umfasst eine A4-Seite. Jetzt zeige ich Dir nochmal einen Brief, der auf dem gleichen Kopierpapier gedruckt ist und ebenfalls eine A4-Seite umfasst. Der geht von einem anderen Telekommunikationsanbieter an Sissi. Jetzt frage Dich, ist das der gleiche Brief? Und Du sagst: hm... das Gewicht ist identisch, also ist es der gleiche Brief. Etwas komisch, oder?
 
Aso stimmt jetzt habe das so ergänzt das alles gleich sein muss, damit es der gleiche "Brief" ist also: Gewicht,Gebühr,Datum,Empfänger.


Ist dann das so richtig
Code:
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + (int) (date ^ (date >>> 32));
        result = prime * result + postage;
        result = prime * result + ((receiver == null) ? 0 : receiver.hashCode());
        long temp;
        temp = Double.doubleToLongBits(weight);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        return result;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Delivery other = (Delivery) obj;
        if (date != other.date)
            return false;
        if (postage != other.postage)
            return false;
        if (receiver == null) {
            if (other.receiver != null)
                return false;
        } else if (!receiver.equals(other.receiver))
            return false;
        if (Double.doubleToLongBits(weight) != Double.doubleToLongBits(other.weight))
            return false;
        return true;
    }
}
 
A

Anzeige




Hier lernst du alle wichtigen Java-Grundlagen.
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben