Zum neuen Informatik-Forum >>
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

String vergleichen
Gehe zu Seite 1, 2  Weiter
 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> Java/JSP
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
SirWayne
Gast





BeitragVerfasst am: 22. Dez 2005 17:06    Titel: String vergleichen Antworten mit Zitat

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 grübelnd
Nach oben
kurellajunior
Administrator


Anmeldungsdatum: 14.02.2005
Beiträge: 214
Wohnort: Berlin-Pankow

BeitragVerfasst am: 23. Dez 2005 00:36    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Crotaphytus



Anmeldungsdatum: 08.05.2005
Beiträge: 213

BeitragVerfasst am: 23. Dez 2005 00:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
SirWayne
Gast





BeitragVerfasst am: 27. Dez 2005 14:09    Titel: Antworten mit Zitat

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





BeitragVerfasst am: 27. Dez 2005 15:20    Titel: Antworten mit Zitat

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 Augenzwinkern
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

BeitragVerfasst am: 27. Dez 2005 15:21    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
kurellajunior
Administrator


Anmeldungsdatum: 14.02.2005
Beiträge: 214
Wohnort: Berlin-Pankow

BeitragVerfasst am: 27. Dez 2005 15:25    Titel: Antworten mit Zitat

Senior Sanchez hat Folgendes geschrieben:

Stimmt nicht Augenzwinkern
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 Augenzwinkern

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Gast






BeitragVerfasst am: 27. Dez 2005 17:02    Titel: Antworten mit Zitat

kurellajunior hat Folgendes geschrieben:
Senior Sanchez hat Folgendes geschrieben:

Stimmt nicht Augenzwinkern
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 Augenzwinkern

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 smile

Meine Aussagen bezüglich == bezogen sich nur auf Referenzen und deren Objekte, nicht auf die primitiven Datentypen Augenzwinkern 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





BeitragVerfasst am: 28. Dez 2005 13:13    Titel: Antworten mit Zitat

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

BeitragVerfasst am: 28. Dez 2005 15:55    Titel: Antworten mit Zitat

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 Augenzwinkern

Jan

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> Java/JSP Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen