Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
SirWayne Gast
|
Verfasst am: 22. Dez 2005 17:06 Titel: String vergleichen |
|
|
Ich hab eine Klasse Datum
Attribut ist wochentag
jetzt will ich eine if abfrage machen
if(wochentag.equals("Donnerstag"));
{.....}
else;
funktinoiert nicht warum????
Bitte um Hilfe thx |
|
Nach oben |
|
|
|
kurellajunior Administrator
Anmeldungsdatum: 14.02.2005 Beiträge: 214 Wohnort: Berlin-Pankow
|
Verfasst am: 23. Dez 2005 00:36 Titel: |
|
|
Objekt.equals vergleicht die Gleichheit zweier Objekte, also ob zwei Instanzen identisch sind.
Zwei Strings sind von Natur aus nicht zwangsläufig an der selben Speicheradresse und damit verschieden. Du brauchst String.compareto("String2") == 0
lias mal die Java API zur Klasse String.
Jan _________________
|
|
Nach oben |
|
|
Crotaphytus
Anmeldungsdatum: 08.05.2005 Beiträge: 213
|
Verfasst am: 23. Dez 2005 00:44 Titel: |
|
|
Zitat: | public boolean equals(Object anObject)
Compares this string to the specified object. The result is true if and only if the argument is not null and is a String object that represents the same sequence of characters as this object. |
Wenn also dieser Wochentag als String gespeichert wird, dürfte es eigentlich keine Probleme geben...
Nichtsdestotrotz würd ich trotzdem die Wochentage eher durch nen Aufzählungstyp repräsentieren. _________________ Genie oder Wahnsinn? Wer kann es wissen... |
|
Nach oben |
|
|
SirWayne Gast
|
Verfasst am: 27. Dez 2005 14:09 Titel: |
|
|
des mit dem compareto geht nicht!!!!!
also ich habe eine methode bestimmenWochentag() die bestimmt mir aus einem Datum den Wochentag und speichert den Tag in das Attribut wochentag
jetzt will ich eine Methode bestimmeKalenderwoche da muss ich prüfen ob das Jaht mit einem Donnerstag anfängt oder das vorige Jahr mit einem Do. endet
Konstruktor ist vorhanden...
also hab ich folgende Methode
bestimme KW()
{
int kw=52;
int pJahr=jahr-1;
Datum test=new Datum(31,12,pJahr);
Datum test1=new Datum(1,1,jahr);
test.bestimmenWochentag()
if(wochentag.equals("Donnerstag"))
{
kw=53;
}
else;
test1.bestimmenWochentag
if(wochentag.equals("Donnerstag"))
{
kw=53;
}
else;
mein kw ist aber immer 52......der geht nie in den treu zweig rein warum????
berechnungscode......... |
|
Nach oben |
|
|
Senior Sanchez Gast
|
Verfasst am: 27. Dez 2005 15:20 Titel: |
|
|
kurellajunior hat Folgendes geschrieben: | Objekt.equals vergleicht die Gleichheit zweier Objekte, also ob zwei Instanzen identisch sind.
Zwei Strings sind von Natur aus nicht zwangsläufig an der selben Speicheradresse und damit verschieden. Du brauchst String.compareto("String2") == 0
lias mal die Java API zur Klasse String.
Jan |
Stimmt nicht
Der Vergleichsoperator == testet zwei Instanzen ob sie auf dieselbe Speicheradresse verweisen, sprich ob die Strings Referenzen auf das selbe Objekt sind. Möchte man Strings inhaltlich vergleichen nutzt man equals, dort werden die einzelnen Alphanumerischen Zeichen miteinander verglichen.
Zum Problem: Da du den Wochentag selber festlegst und keine Java-API das zu brauchen scheint, wären, sofern du Java 5 nutzt eigentlich enums ideal.
machst in deiner klasse dann folgendes:
public enum Tage {Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag};
Dein Attribut was da da hast setzte auch auf den Typ 'Tage' und schon kannste ganz leicht mit einem
switch(attribut) {
Donnerstag: blabla;
}
festlegen was an dem Tag passieren soll.
Wenn dir das zu kompliziert ist und du es nich ganz so stylish haben willst empfehle ich dir die Wochentage als int-Konstanten festzulegen und du brauchst dein attribut, das dann ebenfalls int ist, nur immer vergleichen auf welchen Tag es passt (einfacher Ganzzahl-Vergleich). Diese Lösung findet man auch häufiger im JDK, aber es is halt nich so der hit und die enums sind da einfach die besseren Vergleiche.
Strings für Vergleiche usw. nutze ich nicht gerne, weil da reicht schon nen kleiner Vertipper im String und du suchst dich dämlich. |
|
Nach oben |
|
|
kurellajunior Administrator
Anmeldungsdatum: 14.02.2005 Beiträge: 214 Wohnort: Berlin-Pankow
|
Verfasst am: 27. Dez 2005 15:21 Titel: |
|
|
Weil die equals-methode nicht zuverlässig Strings vergleicht, sondern String-Objekte!
Su musst! die String.compareTo(String) methode verwenden:
Code: | if (wochentag.compareTo("Donnerstag") == 0) then {}
else{} |
_________________
|
|
Nach oben |
|
|
kurellajunior Administrator
Anmeldungsdatum: 14.02.2005 Beiträge: 214 Wohnort: Berlin-Pankow
|
Verfasst am: 27. Dez 2005 15:25 Titel: |
|
|
Senior Sanchez hat Folgendes geschrieben: |
Stimmt nicht
Der Vergleichsoperator == testet zwei Instanzen ob sie auf dieselbe Speicheradresse verweisen, sprich ob die Strings Referenzen auf das selbe Objekt sind. Möchte man Strings inhaltlich vergleichen nutzt man equals, dort werden die einzelnen Alphanumerischen Zeichen miteinander verglichen. |
Viel Glück, ich bin damit schon öfter auf die Nase gefallen
Nebenbei, der Vergleichsoperator "==" vergleicht nur bei nicht trivialen Typen auf Instanzgleichheit. Bei den Grundtypen (int, long, byte etc.) ist der Vergleichsoperator so definiert wie man ihn erwartet: gleiche Zahlen ergeben true. und die Methode int String.compareTo(String) liefert int zurück. Damit ist der Vergleich ==0 zeingend erforderlich...
Jan _________________
|
|
Nach oben |
|
|
Gast
|
Verfasst am: 27. Dez 2005 17:02 Titel: |
|
|
kurellajunior hat Folgendes geschrieben: | Senior Sanchez hat Folgendes geschrieben: |
Stimmt nicht
Der Vergleichsoperator == testet zwei Instanzen ob sie auf dieselbe Speicheradresse verweisen, sprich ob die Strings Referenzen auf das selbe Objekt sind. Möchte man Strings inhaltlich vergleichen nutzt man equals, dort werden die einzelnen Alphanumerischen Zeichen miteinander verglichen. |
Viel Glück, ich bin damit schon öfter auf die Nase gefallen
Nebenbei, der Vergleichsoperator "==" vergleicht nur bei nicht trivialen Typen auf Instanzgleichheit. Bei den Grundtypen (int, long, byte etc.) ist der Vergleichsoperator so definiert wie man ihn erwartet: gleiche Zahlen ergeben true. und die Methode int String.compareTo(String) liefert int zurück. Damit ist der Vergleich ==0 zeingend erforderlich...
Jan |
Also bei mir hat equals bei echten Strings bisher immer geklappt. Wennde mir nen Gegenbeispiel zeigen kannst, dann her damit
Meine Aussagen bezüglich == bezogen sich nur auf Referenzen und deren Objekte, nicht auf die primitiven Datentypen Das dort auf wirkliche Gleichheit der Werte verglichen wird, ist denke ich klar *g*
compareTo sieht mir nach der Implementierung der Methode aus dem Comparable-Interface aus, ursprünglich gedacht um generische Sortiermethoden mit beliebigen Comparable-Objekten füttern zu können, der dann einfach bloß anhand des Rückgabewertes prüft, obs kleiner, größer oder gleich ist.
Aber gut, für einfache Vergleiche scheints auch zu gehen. |
|
Nach oben |
|
|
Sir Wayne Gast
|
Verfasst am: 28. Dez 2005 13:13 Titel: |
|
|
hab das mit dem if( wochentag.compareTo("Donnerstag")==0)
versucht aber es geht nicht....der tag ist donnerstag und er geht nicht in den true zweig rein....Warum???
genau das gleiche problem hab ich mit equal.....
und des mitdem enums ....Sorry ich versteh gar nicht was du mir damit sagen willst....ich lass meine wochentage durche einen algorithmus berechnen... |
|
Nach oben |
|
|
kurellajunior Administrator
Anmeldungsdatum: 14.02.2005 Beiträge: 214 Wohnort: Berlin-Pankow
|
Verfasst am: 28. Dez 2005 15:55 Titel: |
|
|
Erste Frage: ist wochentag vom Typ String?
Wenn ja, Bist Du sicher, dass es auch den Wert "Donnerstag" hat? (DebugModus) Eclipse ist da ein toller Tip. Ansonsten der Standard debug: System.out.println(wochentag);
Dann sehen wir weiter.
PS zu den Enums einfach mal die Java API durchlesen oder bei Eclipse mal enum eintippen, markieren und <Strg>+<Leertaste> drücken
Jan _________________
|
|
Nach oben |
|
|
|