Uppgift 2.2 Hundregister Comparator String
Hej Hej!
Nu har jag fastnat igen!!

Fråga första delen:
En String Comparator är annorlunda mot en int antar jag hur skiljer den sig?
Andra Delen:
Min start på implementering
import java.util.Comparator;
public class DogNameComparator implements Comparator<Dog>{
public String compare(Dog First, Dog Second) {
}
}
Jag får felmeddelande på String i rad 7 i programmet
"The return type is incompatible with Comparator<Dog>, compar(Dog,Dog) Rad 7 Col 12 vad innebär det?
Tredje delen:
Jag är inne i String dokumentation (otroligt svårt att läsa om man programmerat 4 veckor) Det här är på Comparator

Tacksam för tips!
Nu är jag nära får 17/18 på testerna men den klagar över
"* Misslyckat test: Jämförelse med samma hund ger resultatet 0"
och en del som är återkommande är
""expected: <true> but was: <false>"
Min kod:
public class DogNameComparator implements Comparator<Dog>{
public int compare(Dog first, Dog second) {
if(first.getName() == second.getName())
return -1;
if(first.getName() == second.getName())
return 1;
return 0;
}
}
När du jämför strängar (eller andra icke-primitiva datatyper) så använder du inte == utan .equals.
String one = new String("hej");
String two = new String("hej");
System.out.println(one == two); // false;
System.out.println(one.equals(two)); // true
Detta för att == kollar om de är samma objekt, alltså hänvisar till samma ställe i minnet, medan .equals kollar om de innehåller samma värde.
Att jämföra strängar själv är bara tråkigt... jag hade delegerat det till Java.
return first.getName().compareTo(second.getName());
Vill du göra det själv får du implementera i princip samma kod som Java kör där. Du jämför första bokstaven. Är den samma på båda jämför du den andra, etc. Är alla samma blir det 0. Är alla samma så långt det går men första ordet är längre vinner det första ordet och det blir -1. Annars blir det -1 om det första ordet vinner den första "bokstavsduellen" (bokstaven i första ordet ligger tidigare i alfabetet än bokstaven i andra ordet) som inte blir oavgjord, annars 1.
Eller kan du hitta på en egen logik, men varför... det är internationellt standardiserat vad som menas med bokstavsordning, och Java gör det, så varför uppfinna ett kantigt hjul eller lägga flera dagar på att återuppfinna ett runt =)
expected: <true> but was: <false>
Rätt svar enligt facit är true, men din kod säger false.
1. Det var ett bra exempel har ändrat till equals.
import java.util.Comparator;
public class DogNameComparator implements Comparator<Dog>{
public int compare(Dog first, Dog second) {
if(first.equals(second))
return -1;
if(first.equals(second))
return 1;
return 0;
}
}
2. Att jämföra strängar skall jag returnera det där i min kod? jag tycker min if gör samma sak två gånger?
return first.getName().compareTo(second.getName());
3. Men hur får jag koden att bli true då?
Ja, din if gör samma sak två gånger. Byt till
public int compare(Dog first, Dog second) {
return first.getName().compareTo(second.getName());
}
Jag vet inte vilket test det är som klagar på att det får false, så det kan jag inte svara på =)
Nu blir jag förvirrad skall jag inte ha en if-sats? skall jag inte retunera -1 eller 1 och 0?
import java.util.Comparator;
public class DogNameComparator implements Comparator<Dog>{
public int compare(Dog first, Dog second) {
if(first.equals(second))
return -1;
if(first.equals(second))
return 1;
return 0;
}
}
Om koden fortfarande ser ut som ovan så har du två stycken if-satser med samma kriterium för att de skall uppfyllas. Jag antar att en av dem skall vara
(first.equals(second))==false
Alternativt kan man ta bort båda if-satserna om man gör så som thedifference föreslog, dvs. använder sig av compareTo-funktionen.
Jag antar även att (first.equals(second))==false kan skrivas på en mer kompakt form men det var åratal sedan jag använde mig av Java.
Tack för hjälpen syntax är ej min starkate sida efter 4 veckor. men det stämmer att if-satserna har samma kriterium upptäckte det senare.
Ok det varianten låter ju smart gäller bara för mig att förstå vad jag skall göra.
popelos skrev:Nu blir jag förvirrad skall jag inte ha en if-sats? skall jag inte retunera -1 eller 1 och 0?
Det gör du. String.compareTo() returnerar -1, 1 eller 0. Du bara vidarebefordrar det svaret.