Citat:
Ursprungligen postat av
telemarketguden
Hej alla kloka Flashbackare. Jag har en skoluppgift som jag verkligen inte lyckas knäcka. Uppgiften är på tok för lång för ett inlägg här, men jag (som nybörjare) misstänker att felet (för på tester får jag 18/19 rätt) går att finna för en duktig Java-Kodare genom att bara läsa koden.
Vad säger ni, har jag missat någonting elementärt eller är det en detalj som saknas?
Själv tror jag att det är någonting i getTailLenght metoden?
*Koden innehåller nu inga asterixer och kodtagg är använd
Kod:
public class Dog {
private String name;
private String breed;
private int age;
private int weight;
private double tailLength;
public Dog (String name, String breed, int age, int weight) {
this.name = normalise(name);
this.breed = normalise(breed);
this.age = age;
this.weight = weight;
}
private String normalise (String input) {
return input.substring(0, 1).toUpperCase() + input.substring(1).toLowerCase();
}
//metod för att uppdatera åldern när hunden blir äldre
public void changeAge(int newAge) {
if (newAge > this.age) {
this.age = newAge;
}
}
public String getName() {
return name;
}
public String getBreed() {
return breed;
}
public int getAge() {
return age;
}
public int getWeight() {
return weight;
}
public double getTailLength() {
if (breed.equalsIgnoreCase("tax") || breed.equalsIgnoreCase("dachshund")) {
return 3.70;
} else {
return (age * weight) / 10.0;
}
}
public String toString() {
return String.format ("%s, %s, %d år, %d kg, tail=%.2f", name, breed, age, weight, getTailLength());
}
}
Att hjälpa till med felsökning och utbildning känns inte som något för ett diskussionsforum och jag är ingen Javaprogrammerare men den där metoden att räkna ut svanslängd kan inte vara realistisk även om det är ett intressant fenomen att svansen inte börjar växa öht förrän hunden uppnår ett års ålder för alla raser förutom "tax" eller "dachshund".
I övrigt så brister det i verifieringen.
Metoden normalise (som fö är ett dåligt namn här) gör ingen verifiering av stränglängden. Om en hund heter "X" bör det bli en exception om du försöker ta substring(1).
Det skulle inte skada om den här metoden började med att trimma bort eventuella inledande och avslutande blanktecken.
Varför krångla till det och kontrollera breed med equalsIgnoreCase när du själv lagrat dessa i ett specifikt format?
Att lagra åldern på hunden och tillhandahålla en metod för att ändra den är en dålig ide.
Mycket bättre att lagra födelsedatum och i metoden getAge räkna fram den aktuella åldern.
Men bortsett från det och så som du gjort nu, varför skulle man bara godkänna ändringar av åldern uppåt? Om det har blivit fel så vill man väl kunna korrigera åldern även om det innebär en sänkning av den.