Logistiksystem Methode equals und hashcode

Diskutiere Logistiksystem Methode equals und hashcode im Java Basics - Anfänger-Themen Forum; Logistiksystem Methode equals und hashcode Hallo Guten Tag, Kann mir jemand bitte hier weiter Helfen, und zwar komme ich nicht darauf wie es...

  1. Louis12
    Louis12 Mitglied
    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 (Text):
    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 (Text):
    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);      
        }
    }
     
  2. Vielleicht hilft dir dieses Training hier weiter.
  3. Robat
    Robat Bekanntes Mitglied
    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
     
  4. mihe7
    mihe7 Bekanntes Mitglied
    Code (Java):

    if (season != Seasons.WINTER) {
        throw new SantaUnavailableException();
    }
     
    SCNR :p
     
  5. DerWissende
    DerWissende Bekanntes Mitglied
    Mihe7, hast Du wieder von dem guten Schnaps probiert?:p:p :oops:

    Code (Java):
    if (season != Seasons.WINTER) {
        throw new IllegalArgumentException("Santa unavailable at this time! ('Cause he had tasted the brandy.)");
    }
    ;)

    (Ich will auch ewas von dem guten Schnaps, gib es her.;))
     
  6. mihe7
    mihe7 Bekanntes Mitglied
    Da will man einmal was sinnvolles zum Thema beitragen und dann so was...
     
  7. DerWissende
    DerWissende Bekanntes Mitglied
    Stelle Dich doch nicht so an:p
    Bist du noch wach oder schliefst du schon?
     
  8. mihe7
    mihe7 Bekanntes Mitglied
    Eigentlich schlafe ich noch.
     
  9. DerWissende
    DerWissende Bekanntes Mitglied
    :oops: Ich bin immer solange wach wie der Akku geladen ist und wenn der Akku leer ist dann schlafe ich.:p Sollte man zwar nicht so machen, aber was solls. Aber iewas weckte mich heute Morgen....
     
  10. Louis12
    Louis12 Mitglied
    Hallo Leute vielen Dank erstmal für die Antworten !!

    :D :D Ich glaube das kommt erst später.

    Ich habe das folgender maßen versucht.
    Das sind equals und hash code automatisch erzeugt.
    Code (Text):
        /* (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 (Text):
    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;
            }
           
     
  11. mihe7
    mihe7 Bekanntes Mitglied
    Ne, das ist eine Invariante.

    Kannst Du mal erklären, was removeDelivery machen soll?
     
  12. Wenn du Java lernen möchtest, empfehlen wir dir dieses Online-Training hier
Passende Stellenanzeigen aus deiner Region:





Die Seite wird geladen...

Logistiksystem Methode equals und hashcode - Ähnliche Themen

Methode um Vokale zu entfernen UNSCHOEN!
Methode um Vokale zu entfernen UNSCHOEN! im Forum Java Basics - Anfänger-Themen
Eigene charAt(i) Methode schreiben
Eigene charAt(i) Methode schreiben im Forum Java Basics - Anfänger-Themen
Methodenaufruf mit Connection Übergabe
Methodenaufruf mit Connection Übergabe im Forum Datenbankprogrammierung
Potenzmethode per double
Potenzmethode per double im Forum Java Basics - Anfänger-Themen
Operationen/Methoden einen WebService im Browser mit Apache Axis aufrufen
Operationen/Methoden einen WebService im Browser mit Apache Axis aufrufen im Forum Allgemeine Java-Themen
Thema: Logistiksystem Methode equals und hashcode