Gleichheit überprüfen

Annalena123

Aktives Mitglied
Hallo ich muss die Methode equlas für Klasse Buch implementieren :
Anforderungen | Methode equals
  • Die Methode equals nimmt einen Parameter vom Typ Object entgegen.
  • Die Methode gibt true zurück genau dann, wenn alleder folgenden Bedingungen erfüllt sind:
    • Das übergebene Objekt ist selbst ein Exemplar der Klasse Buch.
    • Der Titel des übergebenen Buches stimmt mit dem Titel des eigenen Exemplars überein.
    • Der Name der Autor:in des übergebenen Buches stimmt mit dem Namen der Autor:in des eigenen Exemplars überein.
  • Die weiteren nicht genannten Eigenschaften des Buches sollen nicht zur Bestimmung der Gleichheit herangezogen werden.
  • Java:
    public class Buch
    {
        private final long _isbn;
        private final String _autor;
        private final String _titel;
        private final int _preis;
        private final int _kaufjahr;
    
        /**
         * Erzeugt ein Buch, welches der Sammlung hinzugefuegt
         * werden soll.
         *
         * @param isbn ISBN des Buches
         * @param autor Autor:in des Buches
         * @param titel Titel des Buches
         * @param preis Preis in Eurocent, zu dem das Buch
         *              gekauft wurde
         * @param kaufjahr Jahr, in dem das Buch gekauft wurde
         */
        public Buch (long isbn, String autor, String titel,
                     int preis, int kaufjahr)
        {
            _isbn = isbn;
            _autor = autor;
            _titel = titel;
            _preis = preis;
            _kaufjahr = kaufjahr;
        }
    
        /**
         * Gibt die ISBN des Buches zurueck.
         * @return ISBN
         */
        public long gibISBN()
        {
            return _isbn;
        }
    
        /**
         * Gibt die Autor:in des Buches zurueck.
         * @return Autor:in des Buches
         */
        public String gibAutor()
        {
            return _autor;
        }
    
        /**
         * Gibt den Titel des Buches zurueck.
         * @return Titel des Buches
         */
        public String gibTitel()
        {
            return _titel;
        }
    
        /**
         * Gibt den Preis zurueck, zu dem das Buch gekauft wurde.
         * @return Kaufpreis in Eurocent
         */
        public int gibPreis()
        {
            return _preis;
        }
    
        /**
         * Gibt das Jahr zurueck, in dem das Buch gekauft wurde.
         * @return Kaufjahr
         */
        public int gibKaufjahr()
        {
            return _kaufjahr;
        }
    
       public boolean equals(Object o)
    {
        // ueberpruefe, ob das uebergebene Object ein Buch ist
        if (o instanceof Buch)
        {
            // sichere dem Kompiler zu, dass der Typ wirklich Buch ist
            Buch b =o.getClass();
            // vergleiche an der typsicheren Variable alle noetigen Eigenschaften
            if(b._titel.equals(o._titel) && b._author.equals(o._author)){
                return true;
            }
           
           
        }
        // wenn das Object kein Buch ist, kann es nicht gleich mit einem Buch sein
        return false;
    }
       
    }
    Ich weiß nicht genau wie ich
    // sichere dem Kompiler zu, dass der Typ wirklich Buch ist
    Buch b =.....; implementieren kann! ich hatte
    Code:
    Buch b =o.getClass();
    geschrieben , aber es klappt nicht ! kann jemand mir bitte helfen ?
 
Beste Antwort
Danke , jetzt bekomme ich die Fehler -Meldung unter // vergleiche an der typsicheren Variable alle nötigen Eigenschaften!
Java:
if(b._titel.equals(o._titel) && b._author.equals(o._author)){
            return true;
        }
o._titel wird hier nicht erkannt ! was muss ich hier machen , damit das if -Statement funktionieret ?
Du musst ja auch die Variable b verwenden, die du aus o gecastet hast. "o" ist immer noch vom Typ Object. Und der Vergleichspartner dazu ist die eigene Instanz, also this._titel. Du möchtest das Buch, das als Parameter hereingereicht wird mit der eigenen Instanz vergleichen.

Annalena123

Aktives Mitglied
Mit einem Cast:
Java:
Buch b = (Buch) o;
Danke , jetzt bekomme ich die Fehler -Meldung unter // vergleiche an der typsicheren Variable alle nötigen Eigenschaften!
Java:
if(b._titel.equals(o._titel) && b._author.equals(o._author)){
            return true;
        }
o._titel wird hier nicht erkannt ! was muss ich hier machen , damit das if -Statement funktionieret ?
 

temi

Top Contributor
Danke , jetzt bekomme ich die Fehler -Meldung unter // vergleiche an der typsicheren Variable alle nötigen Eigenschaften!
Java:
if(b._titel.equals(o._titel) && b._author.equals(o._author)){
            return true;
        }
o._titel wird hier nicht erkannt ! was muss ich hier machen , damit das if -Statement funktionieret ?
Du musst ja auch die Variable b verwenden, die du aus o gecastet hast. "o" ist immer noch vom Typ Object. Und der Vergleichspartner dazu ist die eigene Instanz, also this._titel. Du möchtest das Buch, das als Parameter hereingereicht wird mit der eigenen Instanz vergleichen.
 
Beste Antwort

temi

Top Contributor
Falls ihr bereits die Annotation @Override kennengelernt habt, dann gewöhne dir gleich an, diese immer vor die Methode zu schreiben, die du überschreiben möchtest. Dann kann dich der Compiler auf mögliche Fehler hinweisen, die gerne versehentlich passieren:
Java:
@Override
public boolean equals(Object o) {
    //
}

@Override
public boolean equals(Buch o) { // Fehler: Parameter hat den falschen Typ
   
}
Im zweiten Fall würdest du nicht überschreiben, sondern überladen. Danach gibt es zwei Methoden equals().
 

Annalena123

Aktives Mitglied
Danke für deine Erklärung ! :)Eine Frage :Wenn eine Methode überladen ist ,ist es auch gleichzeitig überschrieben wenn man @Override benutzt?
Falls ihr bereits die Annotation @Override kennengelernt habt, dann gewöhne dir gleich an, diese immer vor die Methode zu schreiben, die du überschreiben möchtest. Dann kann dich der Compiler auf mögliche Fehler hinweisen, die gerne versehentlich passieren:
Java:
@Override
public boolean equals(Object o) {
    //
}

@Override
public boolean equals(Buch o) { // Fehler: Parameter hat den falschen Typ
 
}
Im zweiten Fall würdest du nicht überschreiben, sondern überladen. Danach gibt es zwei Methoden equals().
 

KonradN

Super-Moderator
Mitarbeiter
Überladen und überschreiben sind zwei unterschiedliche Dinge:

a) Überladen bedeutet, dass es die methode mit unterschiedlichen Signaturen gibt, die beim Aufruf unterschieden werden können (Also die unterschiedliche Parameter entgegen nehmen).

Also ein Beispiel könnte z.B. der Konstruktor von Scanner sein. Der Konstruktor ist überladen und es gibt diverse Versionen mit unterschiedlichen Argumenten, z.B. mit einem String, mit einem File, einem InputStream, ...)

b) überschreiben bedeutet, dass eine Methode aus der Superklasse überschrieben wird. Ein gutes Beispiel ist die toString() Methode von Object. Diese gibt halt immer nur aus: <ClassSimpleName>@<HashCode>. Wenn Du etwas anderes willst, dann musst Du die Methode überschreiben. Beim Aufruf wird dann die überschriebene Methode aufgerufen.
 

Annalena123

Aktives Mitglied
Ich muss noch Testverfahren mit hashCode Screiben . Ich weiß nicht genau wie man Testfall1 & 2 umsetzt .

Schreibe eine neue, effizientere Implementation der Methode hashCode.
Der Hashcode muss dafür weiterhin möglichst leicht zu berechnen sein, aber auch dafür sorgen, dass die Bücher in einer HashMap gleichmäßig auf die verfügbaren Buckets verteilt werden.

⚠️ Achtung: halte dich an den Vertrag zwischen hashCode und equals! Alle Bücher, die mit equals als gleich bewertet werden, müssen auch den gleichen Hashcode haben!



Testverfahren | Methode hashCode
  • Testfall 1 & 2 überprüfen, wie schnell ein HashSet mit tausenden von Büchern gefüllt werden kann. Deine Implementation muss dabei signifikant schneller sein1als der statische Hashcode 0.
    • Schlägt einer dieser Tests fehl, verteilt dein Hashcode die Bücher wahrscheinlich nicht auf ausreichend viele Buckets! Stelle sicher, dass nicht allzu viele nicht gleiche Bücher den gleichen Hashcode haben.
  • Testfall 3 überprüft, dass dein HashSet mit der korrekten Anzahl an Büchern gefüllt wird und keine Duplikate zulässt, also Bücher, die nach equalsgleich sein müssten.
    • Schlägt dieser Test fehl, hast du den Vertrag zwischen hashCode und equals verletzt! Stelle sicher, dass es keine Bücher gibt, die nach equals gleich sind, aber unterschiedliche Hashcodes haben.
_____
1 Der Test ist bestanden, wenn die Implementation mehr als 80% schneller ist (ca. 20 ms). Mit relativ wenig Aufwand kann die Ausführungszeit aber sogar auf unter 3 ms reduziert werden. Ich habe soweit so etwas ausgedacht, kann mir bitte jemand weiterhelfen ?
Java:
@Override
public int hashCode() {
    //return this.toString().hashCode();
    HashSet<Buch> buch= new HashSet<Buch>();
     for(i=0;i<=1000;i++){
        int buch1= buch.hashcode()
     }
     return buch1;
  
}
 
Zuletzt bearbeitet:

temi

Top Contributor
wenn man @Override benutzt?
Die einzige Funktion von @Override ist es klarzustellen, dass du eine Methode (einer Superklasse oder eines Interfaces) überschreiben möchtest. Das ist eine Klarstellung, sowohl für dich (oder andere) als Programmierer und für den Compiler. Der kann dich dann darauf hinweisen, dass du zwar überschreiben möchtest, es aber nicht tust (weil du vielleicht einen falschen Typen angegeben hast oder ein Schreibfehler im Methodennamen ist).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Diagonale von 2DArray auf gleichheit überprüfen Java Basics - Anfänger-Themen 2
G Elemente von Feld und Liste auf Gleichheit überprüfen Java Basics - Anfänger-Themen 13
R Collections Text-Dateien auf Gleichheit überprüfen Java Basics - Anfänger-Themen 22
A Elemente 2er int[] auf Gleichheit und Position überprüfen Java Basics - Anfänger-Themen 7
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
C Klassen Reguläre Ausdrücke auf Gleichheit prüfen Java Basics - Anfänger-Themen 5
M String auf Gleichheit mit Arraystrings vergleichen Java Basics - Anfänger-Themen 4
K Gleichheit und Identität von Strings Java Basics - Anfänger-Themen 2
X Objekte auf gleichheit prüfen Java Basics - Anfänger-Themen 5
S Objektidentität und gleichheit an diesem Beispiel Java Basics - Anfänger-Themen 7
C Dateiinhalt zweier Dateien auf Gleichheit prüfen Java Basics - Anfänger-Themen 3
H Dates "Tage" auf gleichheit prüfen? Java Basics - Anfänger-Themen 4
C gleichheit von objekten Java Basics - Anfänger-Themen 20
G identität vs gleichheit Java Basics - Anfänger-Themen 11
C Objekte auf gleichheit vergleichen Java Basics - Anfänger-Themen 3
M wertmäßige gleichheit Java Basics - Anfänger-Themen 15
C String soll auf gleichheit (=teilweise) überprüft Java Basics - Anfänger-Themen 5
H strings auf gleichheit / ungleichheit prüfen wer kann helfen Java Basics - Anfänger-Themen 4
K Mehrere Werte in einem Switch Case parallel überprüfen Java Basics - Anfänger-Themen 23
M Scanner Input mit if überprüfen Java Basics - Anfänger-Themen 5
Beowend String auf Satzzeichen überprüfen? Java Basics - Anfänger-Themen 6
N String überprüfen Java Basics - Anfänger-Themen 3
N ResultSet auf Einträge überprüfen Java Basics - Anfänger-Themen 5
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
R ISBN-10-Code überprüfen Java Basics - Anfänger-Themen 7
M Wie kann ich den Index i von einer LinkedList überprüfen? Java Basics - Anfänger-Themen 36
P9cman Vokale in einem String überprüfen mittels Rekursion Java Basics - Anfänger-Themen 8
U zwei 2D arrays auf gleich sein überprüfen Java Basics - Anfänger-Themen 14
Y Wie kann man überprüfen, ob bei einem Print Befehl tatsächlich etwas geprintet wurde? Java Basics - Anfänger-Themen 4
P Möglichen Pfad überprüfen Java Basics - Anfänger-Themen 5
Z Kein überprüfen des gesamten Arrays möglich.(Viergewinnt Spiel) Java Basics - Anfänger-Themen 6
C String auf Dualzahl überprüfen Java Basics - Anfänger-Themen 5
L Wie Input auf verschiedene Kriterien hin überprüfen? Java Basics - Anfänger-Themen 3
P Parameter auf Datenformat überprüfen Java Basics - Anfänger-Themen 5
F Hilfe - Wahrheitswert überprüfen ohne If Java Basics - Anfänger-Themen 2
C Ganzzahlige Werte in Boolean ausgeben und überprüfen ob Primzahl oder nicht, wenn es keine Primzahl ist soll es die Primfaktorzerlegung ausgeben Java Basics - Anfänger-Themen 4
H Harshad-Zahl (Nivenzahl) und Palindrom überprüfen Java Basics - Anfänger-Themen 2
R Wie überprüfen wann der User online oder offline ist? Java Basics - Anfänger-Themen 5
Y Konkrete Hilfe gesucht - Anzahl der Stellen einer eingegebenen Zahl überprüfen Java Basics - Anfänger-Themen 5
S CSV auf doppelte Einträge überprüfen Java Basics - Anfänger-Themen 8
D Klassen Primzahlen überprüfen Java Basics - Anfänger-Themen 3
M Scanner-Eingabe nach gewissem Zeitraum überprüfen Java Basics - Anfänger-Themen 2
T String auslesen bzw. überprüfen Java Basics - Anfänger-Themen 1
Orkanson Methoden String in Wörter zerlegen und Endungen der Wörter überprüfen. Java Basics - Anfänger-Themen 4
F n-1 als Vielfaches von 20 überprüfen Java Basics - Anfänger-Themen 3
S Täglich auf Erinnerungen überprüfen Java Basics - Anfänger-Themen 5
S Eingabe auf Richtigkeit und Reihenfolg überprüfen Java Basics - Anfänger-Themen 3
L Eingabe überprüfen Java Basics - Anfänger-Themen 7
T Input/Output Int Eingabe auf Zahl überprüfen Java Basics - Anfänger-Themen 30
S Passwortchecker Sequenzen überprüfen Java Basics - Anfänger-Themen 4
L String überprüfen mit .equals .contains oder .matches? Java Basics - Anfänger-Themen 1
J Passwort überprüfen Java Basics - Anfänger-Themen 3
kilopack15 Array auf doppelte Elemente überprüfen Java Basics - Anfänger-Themen 16
C Stringbuffer auf Zeilenumbruch überprüfen Java Basics - Anfänger-Themen 14
T Auf Palindrom überprüfen Java Basics - Anfänger-Themen 10
H überprüfen ob in Array gleiche int-Zahlen gespeichert werden. Java Basics - Anfänger-Themen 7
m0n4ch Variablen String auf ungültige Zeichen überprüfen Java Basics - Anfänger-Themen 13
Jinnai4 Mehrere Textfelder überprüfen Java Basics - Anfänger-Themen 16
C Bei der LinkedList auf Palindrom überprüfen Java Basics - Anfänger-Themen 4
W Methode um Nummer zu überprüfen. Java Basics - Anfänger-Themen 5
M Felder leer - überprüfen? Java Basics - Anfänger-Themen 2
H Eingegebenen String mit If überprüfen Java Basics - Anfänger-Themen 8
W String Array in Int umwandeln um auf Zahl zu überprüfen Java Basics - Anfänger-Themen 4
Z Benutzereingabe überprüfen. Java Basics - Anfänger-Themen 2
T Matrix auf Symmetrie überprüfen Java Basics - Anfänger-Themen 6
S Variablen Array in ArrayList auf doppelte Einträge überprüfen Java Basics - Anfänger-Themen 4
B Schaltjahr überprüfen (Code) Java Basics - Anfänger-Themen 4
B Datentypen Textfeld auf Nicht-Zahlen überprüfen Java Basics - Anfänger-Themen 10
J Etwas dauerhaft überprüfen, wie ? Java Basics - Anfänger-Themen 8
T CSV auf Inhalt und Zeilen überprüfen Java Basics - Anfänger-Themen 2
I Matrix überprüfen Java Basics - Anfänger-Themen 8
B Variablen Objektvariablen ständig überprüfen Java Basics - Anfänger-Themen 3
A String auf Format überprüfen Java Basics - Anfänger-Themen 7
D Javaliste auf gleiche Einträge überprüfen Java Basics - Anfänger-Themen 2
M String überprüfen ob nur Buchstaben enthalten sind? Java Basics - Anfänger-Themen 10
Todesbote String auf Muster überprüfen Java Basics - Anfänger-Themen 19
A Input/Output Input überprüfen und weiterverarbeiten Java Basics - Anfänger-Themen 10
U JSP Password überprüfen ob es Zahlen enthält Java Basics - Anfänger-Themen 3
K Eingabe überprüfen Java Basics - Anfänger-Themen 4
B String nach regex überprüfen Java Basics - Anfänger-Themen 6
M String auf Inhalt überprüfen Java Basics - Anfänger-Themen 11
H Mehrdimensionales Array - Inhalt auf Null überprüfen Java Basics - Anfänger-Themen 5
S Java Scanner auf Zahlen/Numerische Zeichen überprüfen Java Basics - Anfänger-Themen 15
D Eine Stelle eines Char- Arrays nach dem vorkommen in einem ganzem anderem Array überprüfen Java Basics - Anfänger-Themen 20
M Erster JAR Start überprüfen Java Basics - Anfänger-Themen 6
F TextFeld überprüfen Java Basics - Anfänger-Themen 20
S Eingabe auf int bzw. String überprüfen Java Basics - Anfänger-Themen 6
T Attribute eines anderen Objektes überprüfen und danach handeln Java Basics - Anfänger-Themen 7
A Integer Eingabe überprüfen Java Basics - Anfänger-Themen 7
A Tic Tac Toe - Brett auf Sieger überprüfen Java Basics - Anfänger-Themen 3
S Char auf Zahl überprüfen Java Basics - Anfänger-Themen 8
T Kommandozeilen Parameter überprüfen Java Basics - Anfänger-Themen 3
D Internetseite überprüfen Java Basics - Anfänger-Themen 9
G überprüfen ob char = 'N' 'S' 'O' oder 'W' Java Basics - Anfänger-Themen 42
H Methoden Array auf Vorkommen eines Integers überprüfen Java Basics - Anfänger-Themen 2
M Argument der Kommandozeile überprüfen Java Basics - Anfänger-Themen 4
S Klassen Aufgabe: Binärbaum überprüfen Java Basics - Anfänger-Themen 16
Os-Programming Checkbox immer wieder überprüfen Java Basics - Anfänger-Themen 13
H überprüfen, ob Objekt verändert wurde Java Basics - Anfänger-Themen 11
GianaSisters Auf Datentyp überprüfen Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben