Som nämnt tidigare så är det denna kod som är fel:
Kod:
if (tailArray.equals(breed));{
found = true;
}
Din kod ser egentligen ut så här:
Kod:
public double getTailLength() {
String[] tailArray = {"Tax", "Dachshund", "tax", "dachshund"};
boolean found = false;
// denna rad försöker alltså jämföra om värdet i variablen
//breed är detsamma som hela arrayen.
// Detta kommer alltid att resultera i false. Men eftersom
// Du har ett semicolon efter så tar din if-sats slut här.
if (tailArray.equals(breed)); // detta är ett enstaka statement
{
// Denna kod kommer ALLTID att köras.
// Att du har brackets gör bara att du hamnar i ett annat scope
// Annat scope innebär att alla variabler du deklarerar här inne
// kommer att förstöras när du lämnar scopet. Du deklarerade found utanför,
// men denna kommer alltid sättas till true.
found = true;
}
if (found) {
length = 3.7;
}
else {
// Detta kommer aldrig att köras
length = (double) age * weight / 10.0;
}
return length;
}
För att fixa testa så måste du som tidigare påpekat, loopa igenom arrayen och jämföra värde efter värde.
Lättast att göra det för en nybörjare är att använda en foreach-loop. En for-eachloop är att föredra eftersom du inte behöver ett index som finns i en for loop, då är för each lättare. Du kan även som andra påpekat använda streams som är lite mer avancerat och kraftfullare. Vill du vara riktigt vild och kalen så kan du använda rekursion.
Men här använder jag en foreach loop. Jag sätter length till ett defaultvärde. Vi går igenom arrayen steg för steg och jämför, hittar vi då ändrar vi värdet bryter ur loopen och returnerar. Får vi ingen träff ja då returnerar vi vårat defaultvärde.
Kod:
public double getTailLength() {
String[] tailArray = { "Tax", "Dachshund", "tax", "dachshund" };
double length = (double) age * weight / 10.0;
for (String value : tailArray) {
if (breed.equals(value)) {
length = 3.7;
break;
}
}
return length;