Calender - Equals Problem

EmmaM95

Mitglied
Ich muss in meiner Equals Methode nur das Datum beachten, also wenn das gleiche Datum, dann ist gleich. Die Uhrzeit soll nicht beachtet werden. Mein Problem ist, dass es beachtet wird und ich im Internet nichts dazu gefunden habe.

Code:
    private Calendar date = Calendar.getInstance();
   
    public Dataset(Calendar date, double open, double high, double low, double close){
        this.date=date;
        //this.open=open;
        //this.high=high;
        //this.low=low;
       // this.close=close;
    }

    public  Calendar getDate(){
      return date;
}

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        long temp;
        temp = Double.doubleToLongBits(close);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        result = prime * result + ((date == null) ? 0 : date.hashCode());
        temp = Double.doubleToLongBits(high);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        temp = Double.doubleToLongBits(low);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        temp = Double.doubleToLongBits(open);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (!(obj instanceof Dataset)) {
            return false;
        }
        Dataset other = (Dataset) obj;
        if (Double.doubleToLongBits(close) != Double
                .doubleToLongBits(other.close)) {
            return false;
        }
        if (date == null) {
            if (other.date != null) {
                return false;
            }
        } else if (!date.equals(other.date)) {
            return false;
        }
        if (Double.doubleToLongBits(high) != Double
                .doubleToLongBits(other.high)) {
            return false;
        }
        if (Double.doubleToLongBits(low) != Double.doubleToLongBits(other.low)) {
            return false;
        }
        if (Double.doubleToLongBits(open) != Double
                .doubleToLongBits(other.open)) {
            return false;
        }
        return true;
    }



Ich muss in meiner toString Methode auch nur das Datum ausgeben, aber dafür müsste ich Calendar formatieren. Nur weiß ich nicht wie.
 

keram

Aktives Mitglied
Könntest du mir einmal ein Datum schicken in welcher form du es nun angezeigt bekommst, bzw die zu vergleichenden Daten einmal bitte..
 

EmmaM95

Mitglied
Ich habe keine Daten, die es vergleichen. Ich habe ein Portal wo ich es reinstelle und es den Code testet.
Das sind die Fehlermeldungen:
Two instances of type Dataset with the same date but different time should still be equal.
Expected: <java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Berlin",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=143,lastRule=java.util.SimpleTimeZone[id=Europe/Berlin,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2013,MONTH=7,WEEK_OF_YEAR=35,WEEK_OF_MONTH=5,DAY_OF_MONTH=22,DAY_OF_YEAR=239,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=5,HOUR_OF_DAY=16,MINUTE=7,SECOND=37,MILLISECOND=10,ZONE_OFFSET=3600000,DST_OFFSET=3600000];9.65;9.75;9.61;9.74>
but: was <java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Berlin",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=143,lastRule=java.util.SimpleTimeZone[id=Europe/Berlin,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2013,MONTH=7,WEEK_OF_YEAR=35,WEEK_OF_MONTH=5,DAY_OF_MONTH=22,DAY_OF_YEAR=239,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=8,HOUR_OF_DAY=16,MINUTE=10,SECOND=10,MILLISECOND=10,ZONE_OFFSET=3600000,DST_OFFSET=3600000];9.65;9.75;9.61;9.74>
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
at org.junit.Assert.assertThat(Assert.java:865)
at jpp.marketanalysis.tests.data.TestDataset.testEqualsAndHashCode(TestDataset.java:109)


Dataset#toString did not give a correctly formatted string.
Expected: "22.08.2013;9.65;9.75;9.61;9.74"
but: was "java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=\"Europe/Berlin\",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=143,lastRule=java.util.SimpleTimeZone[id=Europe/Berlin,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2013,MONTH=7,WEEK_OF_YEAR=35,WEEK_OF_MONTH=5,DAY_OF_MONTH=22,DAY_OF_YEAR=239,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=8,HOUR_OF_DAY=16,MINUTE=10,SECOND=10,MILLISECOND=10,ZONE_OFFSET=3600000,DST_OFFSET=3600000];9.65;9.75;9.61;9.74"
 

keram

Aktives Mitglied
Damit kann ich nichts anfangen. Was genau hast du erwartet und wo bekommst du deinen Daten her?
Auf welches Portal lädst du deine Datei?
Wir brauchen mehr angaben zu deinem Problem, so kommen wir nicht weiter
 

EmmaM95

Mitglied
Das ist ein Portal von der Uni.

Die Aufgabenstellung sieht so aus:
public boolean equals(Object other) Vergleicht zwei Objekte Dataset Instanzen miteinander. Dabei sollen alle Felder auf Gleichheit geprüft werden. Achten Sie darauf, dass beim Vergleich der beiden Calendar-Objekte ausschließlich das Datum geprüft wird, nicht etwa die Uhrzeit.

Und in der toString Methode soll es das Datum in diesem Format ausgeben:DD.MM.YYYY

Aber was bei mir rauskommt sieht man oben. Ich weiß nicht wie ich es formatieren soll, weil ich es mit dem DateFormatter probbiert hab und es nicht geht.
 

keram

Aktives Mitglied
Lass dir das Datum von dem Uni Portal mal als String ausgeben, du könntest natürlich auch mit dem Datensatz arbeiten der dir oben zurueck geben wurde da er ja Daten wie ERA=1,YEAR=2013,MONTH=7,WEEK_OF_YEAR=35,WEEK_OF_MONTH=5,DAY_OF_MONTH=22,DAY_OF_YEAR=239,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=4 enthält.
 

MWin123

Bekanntes Mitglied
Stell doch mal die komplette Klasse rein.

Generell würde ich equals und Hashcode nicht selber schreiben, sondern von der IDE generieren lassen.
 

EmmaM95

Mitglied
hab ich auch gemacht :
Code:
package jpp.marketanalysis.data;


import java.text.DecimalFormat;
import java.util.Calendar;



public class Dataset {


    private final static DecimalFormat DECIMAL_FORMAT = new DecimalFormat(
            "0.00");
   
    private Calendar date = Calendar.getInstance();
    private double open;
    private double high;
    private double low;
    private double close;
   
    public Dataset(Calendar date, double open, double high, double low, double close){
        this.date=date;
        this.open=open;
        this.high=high;
        this.low=low;
        this.close=close;
    }

    public Calendar getDate() {
        return date;
    }
    }
    public double getOpen() {
        return open;
    }

    public double getHigh() {
        return high;
    }

    public double getLow() {
        return low;
    }

    public double getClose() {
        return close;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        long temp;
        temp = Double.doubleToLongBits(close);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        result = prime * result + ((date == null) ? 0 : date.hashCode());
        temp = Double.doubleToLongBits(high);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        temp = Double.doubleToLongBits(low);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        temp = Double.doubleToLongBits(open);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (!(obj instanceof Dataset)) {
            return false;
        }
        Dataset other = (Dataset) obj;
        if (Double.doubleToLongBits(close) != Double
                .doubleToLongBits(other.close)) {
            return false;
        }
        if (date == null) {
            if (other.date != null) {
                return false;
            }
        } else if (!date.equals(other.date)) {
            return false;
        }
        if (Double.doubleToLongBits(high) != Double
                .doubleToLongBits(other.high)) {
            return false;
        }
        if (Double.doubleToLongBits(low) != Double.doubleToLongBits(other.low)) {
            return false;
        }
        if (Double.doubleToLongBits(open) != Double
                .doubleToLongBits(other.open)) {
            return false;
        }
        return true;
    }
   
    @Override
    public String toString() {
        return  date+ DECIMAL_FORMAT.format(open) + ";" + high
                + ";" + DECIMAL_FORMAT.format(low) + ";" + DECIMAL_FORMAT.format(close) ;
    }
   
   
}
 

MWin123

Bekanntes Mitglied
Probier mal:

Java:
import java.util.Calendar;
import java.util.Comparator;

public class TimeIgnoringComparator implements Comparator<Calendar> {
    public int compare(Calendar c1, Calendar c2) {
        if (c1.get(Calendar.YEAR) != c2.get(Calendar.YEAR))
            return c1.get(Calendar.YEAR) - c2.get(Calendar.YEAR);
        if (c1.get(Calendar.MONTH) != c2.get(Calendar.MONTH))
            return c1.get(Calendar.MONTH) - c2.get(Calendar.MONTH);
        return c1.get(Calendar.DAY_OF_MONTH) - c2.get(Calendar.DAY_OF_MONTH);
    }
}
Java:
import java.text.DecimalFormat;
import java.util.Calendar;


public class Dataset {

    private final static DecimalFormat DECIMAL_FORMAT = new DecimalFormat("0.00");

    private Calendar date = Calendar.getInstance();
    private double open;
    private double high;
    private double low;
    private double close;

    public Dataset(Calendar date, double open, double high, double low, double close) {
        this.date = date;
        this.open = open;
        this.high = high;
        this.low = low;
        this.close = close;
    }

    public Calendar getDate() {
        return date;
    }

    public double getOpen() {
        return open;
    }

    public double getHigh() {
        return high;
    }

    public double getLow() {
        return low;
    }

    public double getClose() {
        return close;
    }

    @Override
    public boolean equals(Object o) {
        TimeIgnoringComparator timeIgnoringComparator = new TimeIgnoringComparator();

        if (this == o) return true;
        if (!(o instanceof Dataset)) return false;

        Dataset dataset = (Dataset) o;

        if (Double.compare(dataset.open, open) != 0) return false;
        if (Double.compare(dataset.high, high) != 0) return false;
        if (Double.compare(dataset.low, low) != 0) return false;
        if (Double.compare(dataset.close, close) != 0) return false;

        return timeIgnoringComparator.compare(dataset.date, date) == 0;
    }

    @Override
    public int hashCode() {
        int result;
        long temp;
        result = date != null ? date.hashCode() : 0;
        temp = Double.doubleToLongBits(open);
        result = 31 * result + (int) (temp ^ (temp >>> 32));
        temp = Double.doubleToLongBits(high);
        result = 31 * result + (int) (temp ^ (temp >>> 32));
        temp = Double.doubleToLongBits(low);
        result = 31 * result + (int) (temp ^ (temp >>> 32));
        temp = Double.doubleToLongBits(close);
        result = 31 * result + (int) (temp ^ (temp >>> 32));
        return result;
    }

    @Override
    public String toString() {
        return date + DECIMAL_FORMAT.format(open) + ";" + high
                + ";" + DECIMAL_FORMAT.format(low) + ";" + DECIMAL_FORMAT.format(close);
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Datentypen Calender/Gregorianisch/Julianisch/JDN Konvertierung Java Basics - Anfänger-Themen 4
K Problem bei der Verwendung von Gregorian Calender Java Basics - Anfänger-Themen 3
G Date - Calender | "Vergleich" Java Basics - Anfänger-Themen 3
M Datentypen Calender TimeInMillis - long number erzeugen? Java Basics - Anfänger-Themen 2
T Calender / DateFormat macht plus ein Monat Java Basics - Anfänger-Themen 3
N Calender Java Basics - Anfänger-Themen 3
G Gregorian Calender Monatsgrenze Java Basics - Anfänger-Themen 12
J gregorian calender zu java.sql.timestamp problem Java Basics - Anfänger-Themen 3
G Calender Programmieren Java Basics - Anfänger-Themen 7
C Calender set Methode beim Tag funzt nicht . Java Basics - Anfänger-Themen 2
Say Equals Java Basics - Anfänger-Themen 6
W LocalDate vergleichen mit Equals? Java Basics - Anfänger-Themen 7
W Equals-Methode überschreiben bei composition Java Basics - Anfänger-Themen 20
W Wann und warum hashcode und equals? Java Basics - Anfänger-Themen 14
X Datentypen String.equals funktioniert nicht Java Basics - Anfänger-Themen 5
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
J compareTo()- und equals-Methode Java Basics - Anfänger-Themen 3
S 2 Strings mit Equals vergleichen Java Basics - Anfänger-Themen 11
lallmichnichtzu Methoden Überladen des .equals-Operators Java Basics - Anfänger-Themen 6
C Objekt1.equals(Objekt2) = immer false. Wieso? Java Basics - Anfänger-Themen 22
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
M Objekte mittels equals vergleichen Java Basics - Anfänger-Themen 14
S Interface Equals und hashCode Java Basics - Anfänger-Themen 16
G Java equals() Methode Java Basics - Anfänger-Themen 9
J equals funktioniert nicht - Warum Java Basics - Anfänger-Themen 13
B Date - Vergleich (equals / after) ? Java Basics - Anfänger-Themen 3
G Ratlosigkeit zur Aufgabe im Anhang (boolean, equals.) Java Basics - Anfänger-Themen 20
D Unterschied == und equals in Arrays Java Basics - Anfänger-Themen 2
O equals Methode möglichst effizient Java Basics - Anfänger-Themen 13
H equals methode Java Basics - Anfänger-Themen 1
L Logistiksystem Methode equals und hashcode Java Basics - Anfänger-Themen 20
J Methoden Equals Methode für Integer und Objekte überschreiben? Java Basics - Anfänger-Themen 9
M Erste Schritte Mehrere eingaben in einer Line vergleichen (if equals...) Java Basics - Anfänger-Themen 6
I equals (Override) mit eigener Exception (keine Runtime-Exception) Java Basics - Anfänger-Themen 9
A OOP Richtige Verwendung von ArrayList und equals Java Basics - Anfänger-Themen 24
E equals Prüfung fehlgeschlagen Java Basics - Anfänger-Themen 3
C Objekt equals Java Basics - Anfänger-Themen 2
L String überprüfen mit .equals .contains oder .matches? Java Basics - Anfänger-Themen 1
H equals Methode Java Basics - Anfänger-Themen 1
F String equals NULL Problem Java Basics - Anfänger-Themen 4
D Auf equals von Vaterklasse zugreifen Java Basics - Anfänger-Themen 4
S Methoden equals(object o) / toString Java Basics - Anfänger-Themen 15
T Datentypen compareTo() u. equals() bei Strings Java Basics - Anfänger-Themen 3
Psypsy hashCode, equals und toString Java Basics - Anfänger-Themen 3
K hashCode, compareTo vs. equals Java Basics - Anfänger-Themen 3
M Vergleich zweier Array Stellen mit equals/NullpointerException Java Basics - Anfänger-Themen 9
S Unterschiede zwischen equals und contains Java Basics - Anfänger-Themen 2
F Erste Schritte Hilfe bei Übung zu String equals() und Schleifen Java Basics - Anfänger-Themen 8
A Probleme mit equals und get.Text Java Basics - Anfänger-Themen 12
S compareTo() und equals() Java Basics - Anfänger-Themen 6
S equals Methode bei String Java Basics - Anfänger-Themen 5
R illegal start of expression - 3 Strings vergleichen mit .equals () Java Basics - Anfänger-Themen 5
K Cast bei equals Java Basics - Anfänger-Themen 2
T SQL equals Java Basics - Anfänger-Themen 4
OnDemand Methoden Equals Methde Java Basics - Anfänger-Themen 3
D if block mit equals im rumpf Java Basics - Anfänger-Themen 11
K Vererbung equals-Methode bei Vererbung abstrakter Klassen Java Basics - Anfänger-Themen 8
SexyPenny90 Wieso ist diese eigene Equals-Methode schlecht? Java Basics - Anfänger-Themen 17
K String - Equals Java Basics - Anfänger-Themen 2
J Klassen Warum ist (a.equals(b)) gleich (a==b)? Java Basics - Anfänger-Themen 13
B Warum gibst hier Equals false zurück ? Java Basics - Anfänger-Themen 23
S Verständnissfrage equals() Java Basics - Anfänger-Themen 2
R compareTo & equals Java Basics - Anfänger-Themen 10
M Verschiedene Möglichkeiten mit 'equals' abdecken? Java Basics - Anfänger-Themen 9
M Collections Problem bei Überschreibung von hashcode() und equals() bei Hashset-Implementierung Java Basics - Anfänger-Themen 5
W Stringvergleich mit equals Java Basics - Anfänger-Themen 13
C equals() Java Basics - Anfänger-Themen 4
D Problem mit string.equals bzw string.contains Java Basics - Anfänger-Themen 4
T Problem mit der while(!string.equals("x")) Java Basics - Anfänger-Themen 2
E Equals-Methode auf Class-Object Java Basics - Anfänger-Themen 17
X problem mit equals.gelöst Java Basics - Anfänger-Themen 2
J Methode equals() Java Basics - Anfänger-Themen 7
M Equals überschreiben Java Basics - Anfänger-Themen 3
K equals() und hashcode() überschreiben Java Basics - Anfänger-Themen 5
K equals in Hashmap() Java Basics - Anfänger-Themen 4
B if equals(irgendeine Zahl+Buchstabe) Java Basics - Anfänger-Themen 6
T equals() und hashCode() Java Basics - Anfänger-Themen 7
D probs mit clone und equals Java Basics - Anfänger-Themen 10
3 Collections containsKey() liefert false obwohl equals() true liefert Java Basics - Anfänger-Themen 6
N Vergleich per equals Java Basics - Anfänger-Themen 5
S comparable und equals Java Basics - Anfänger-Themen 7
M Frage zu Textvergleich (equals) Java Basics - Anfänger-Themen 8
G Strings vergleichen mit equals, geht das kürzer? Java Basics - Anfänger-Themen 4
B Frage zu Funktion mit equals Java Basics - Anfänger-Themen 17
D Eigene equals methode schreiben Java Basics - Anfänger-Themen 4
J Gibt es eine möglichkeit ähnlich wie .equals(bedingung1 ||bedingung ..n) ? Java Basics - Anfänger-Themen 5
D "2010–03–12".equals( "2010-03-12" ) Java Basics - Anfänger-Themen 6
X Frage zur Implementierung von equals() Java Basics - Anfänger-Themen 2
T Problem mit equals Java Basics - Anfänger-Themen 5
K Equals,Instanceof und "==" Java Basics - Anfänger-Themen 7
C warum liefert equals kein TRUE Java Basics - Anfänger-Themen 12
E Java hashCode equals Problem Java Basics - Anfänger-Themen 2
S equals vergleich Java Basics - Anfänger-Themen 10
H Equals hascode Java Basics - Anfänger-Themen 5
S Equals Downcast? Java Basics - Anfänger-Themen 11
D equals Vergleiche Java Basics - Anfänger-Themen 7
L String mit equals vergleichen Java Basics - Anfänger-Themen 6
neurox Tutorial equals und hashCode überschreiben Java Basics - Anfänger-Themen 33
F String equals null wird nicht angenommen. Java Basics - Anfänger-Themen 24
A Reihenfolge bei equals() Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben