6 svar
85 visningar
popelos 180
Postad: 13 jan 12:12

Uppgift 2.4 Comparable på en klass Owner

Hej jag har suttit ett tag nu och försökt implementera comparable i min owner klass 

Jag tycker inte riktigt jag får ihop någon logik vad är det exakt jag skall kolla av utifrån instruktionerna är ideen med uppgiften att klassen owner skall kunna sorteras baserat på ägares namn?

public class Owner implements Comparable<Owner> { 


    private String name; 
        

    public Owner (String name) { 
        this.name = name.toUpperCase();
        
    
    }
            
    public String getName() {
        return this.name;
    }
    
    public String toString() {
        return "Owner: " + name;
    }

    

    
    public int compareTo(Owner other)
    {
        if(this.name.compareTo(other.name) != 0) {
            return -1;
         } else {
            return 0;
            

         }
    }

}
Laguna Online 31094
Postad: 13 jan 12:38

Jag vet inte vad iLearn är, men tydligen finns det testfall där som visar hur metoden används.

popelos 180
Postad: 13 jan 14:04

Jo det finns och den är testad 17/18 så verkar vara något litet fel med returns tror jag det är inte det lättaste att läsa och förstå sig på testfall som nybörjare men är det något tydligt fel här får ni gärna ge tips på vad som görs fel så jag kan lära mig! 😀

Laguna Online 31094
Postad: 13 jan 14:29

Du ska nog returnera this.name.compareTo(other.name) helt enkelt, inte -1 när den returnerar 1.

popelos 180
Postad: 13 jan 18:59

Tack jag fick rätt däremot undrar jag varför jag skall retunera 0 i min andra return. 

public class Owner implements Comparable<Owner> { 


    private String name; 
        

    public Owner (String name) { 
        this.name = name.toUpperCase();
        
    
    }
            
    public String getName() {
        return this.name;
    }
    
    public String toString() {
        return "Owner: " + name;
    }

    

    
    public int compareTo(Owner other) {
    
        if(this.name.compareTo(other.name) != 0) {
           return this.name.compareTo(other.name);
         } else {
            return 0;
            

         }
    }

}
       
thedifference 486
Postad: 13 jan 19:10 Redigerad: 13 jan 19:20

Du gör detta onödigt krångligt. Jag ska försöka visa varför det räcker med en enda rad.

public int compareTo(Owner other) {
    int result = this.name.compareTo(other.name);
    
    if (result < 0) {
        return result;
    } else if (result == 0) {
        return 0;
    } else if (result > 0) {
        return result;
    }
}

Så här får vi inte göra, för att kompilatorn kommer klaga på att det inte alltid blir en return, fastän vi har täckt alla fall.

public int compareTo(Owner other) {
    int result = this.name.compareTo(other.name);
    
    if (result < 0) {
        return result;
    } else if (result == 0) {
        return 0;
    } else {
        return result;
    }
}

Kan därmed även skrivas som:

public int compareTo(Owner other) {
    int result = this.name.compareTo(other.name);
    
    if (result < 0) {
        return result;
    } else if (result == 0) {
        return result;
    } else {
        return result;
    }
}

Eftersom vad result än är så skickar vi tillbaka det:

public int compareTo(Owner other) {
    int result = this.name.compareTo(other.name);
    
    return result;
}

Onödigt att skapa en variabel så vi kan helt enkelt:

public int compareTo(Owner other) {
    return this.name.compareTo(other.name);
}

Notering: Hade först felaktigt sagt att String.compareTo bara skickar tillbaka -1, 0 eller 1.

popelos 180
Postad: 13 jan 19:51

Ok jag skall gå igenom det jag är som sagt mest nöjd om det fungerar men såklart inte bra med duplicering eller onödiga steg. 

Svara
Close