Gå til innhold

Vil ikke sammenligne to String-verdier!


Anbefalte innlegg

Hei!

 

Jeg har en if-statement her som ikke vil bli utført, så den dropper til else.

 

Når jeg kjører denne debug-funksjonen:

 

public void printtype() throws IOException{
   System.out.println((table.get(table.size()-1)).getType());
   System.out.println((table.get(table.size()-2)).getType());
   }

 

 

Så får jeg ut f.eks:

 

h

h

 

 

Men når jeg kjører denne koden:

 

    public void compare() throws IOException{
       if ((table.get(table.size()-1)).getType()==(table.get(table.size()-2)).getType()){
           System.out.println("Yey! The two last cards are of same type");
       }
       else{
           System.out.println("Returned false");
       }
   }

 

 

Så får jeg bare:

 

Returned false

 

 

Jeg vet allerede at "((table.get(table.size()-1)).getType()==(table.get(table.size()-2)).getType())" er sant, fordi "h==h"! Hvorfor dropper den da til else, som om det ikke var sant?

Lenke til kommentar
Videoannonse
Annonse

Skal prøve det ut! Men hvorfor kan jeg ikke sammenligne objektet?

 

getType leverer ut dette:

 

  public Card(String n, String t)
   {
       number = n;
       type = t;
   }
   public String getType(){
       return type;
   }

 

 

"h" skal jo være lik "h", om det er et objekt eller en string. Alt jeg gjør er å spørre om X er lik Y, der X er "h", og Y er "h".

Endret av Gavekort
Lenke til kommentar

Skal prøve det ut! Men hvorfor kan jeg ikke sammenligne objektet?

 

getType leverer ut dette:

 

  public Card(String n, String t)
   {
       number = n;
       type = t;
   }
   public String getType(){
       return type;
   }

 

 

"h" skal jo være lik "h", om det er et objekt eller en string. Alt jeg gjør er å spørre om X er lik Y, der X er "h", og Y er "h".

Det har noe å gjøre med at String ikke er en datatype, men er faktisk en klasse. Derfor vil ikke == fungere siden det er ikke samme h'en.

Lenke til kommentar

Som Dinosauromann sier blir nok .equals() eller en gettext det greieste.

 

To objekter som er forskjellige, er nettopp forskjellige. Selv om de inneholder en lik tekststreng.

 

HiO?

 

if ((table.get(table.size()-1)).getType().equals(table.get(table.size()-2)).getType())

{}

else

{}

 

eller noe i den dur

Endret av Peder82
Lenke til kommentar

Ja! Fikk det til selv! :)

 

Ble slik:

 

if ((table.get(table.size()-1).getType()).equals((table.get(table.size()-2).getType()))) {
      	System.out.println("Yey! The two last cards are of same type");
       }
       else{
           System.out.println("Returned false");
       }

 

 

Grusomt mange paranteser, men det er vel min egen feil! :p

Endret av Gavekort
Lenke til kommentar

Ok ok! Tror jeg forstår nå! :)

 

Hvordan ville dere skrevet koden da? Jeg er ikke kjent med .equals() funksjonen.

Det finnes en 2-3 metoder i String klassen du kan bruke, equals() og compareTo(). En annen måte er å bruke en char og en int og sammenligne de med ==. Jeg hadde nok brukt equals om jeg om jeg bare trengte å vite om den var lik, men comparTo hvis jeg trengte å vite noe om størrelseforholdet.

Lenke til kommentar
  • 4 uker senere...

Litt ryddigere. Mye av begrepet "god kode" ligger i at du holder i bakhodet mens du programmerer at andre skal kunne lese koden din. Dette vil også hjelpe deg senere når du selv skal revidere en kodesnutt f eks.

 

String t1 = table.get(table.size()-1).getType();
String t2 = table.get(table.size()-2).getType();

if (t1.equals(t2)) {
   System.out.println("Yey! The two last cards are of same type");
} else {
   System.out.println("Returned false");
}

Endret av LostOblivion
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...