• 1
  • 2
2024-01-03, 23:07
  #1
Medlem
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());
    }

}
__________________
Senast redigerad av telemarketguden 2024-01-04 kl. 00:07. Anledning: asteriskerna tas bort kodtagg används
Citera
2024-01-03, 23:28
  #2
Medlem
SvenHelsings avatar
Redigera ditt inlägg. Ta bort asteriskerna och använd kodtaggarna istället. Då bevaras mellanslagen.

Citat:
Ursprungligen postat av dethalvabarnet
Varför ingen sticky än? Här är en.

Javascript är inte Java!
http://en.wikipedia.org/wiki/Javascript

När ni visar javakod, markera er kod helt och klicka på antingen # (CODE) eller PHP-knappen om det är mycket kod markera gärna koden + tagsen som ikonerna i top generar och klicka igen på SPOILER knappen
(FB) Använd (CODE)(/CODE) eller (PHP)(/PHP) och Javascript är inte Java
__________________
Senast redigerad av SvenHelsing 2024-01-04 kl. 00:01.
Citera
2024-01-03, 23:29
  #3
Medlem
supremanics avatar
Ett uppenbart klagomål är åtminstone att du deklarerar
Kod:
 private double tailLength; 
utan att den används nånstans.
Citera
2024-01-04, 00:40
  #4
Medlem
SvenHelsings avatar
Får du bara reda på hur många tester som passerats eller vet du något om testet som fallerar?
Citera
2024-01-04, 00:43
  #5
Medlem
Klassmetoder anropas med self istället för breed som gjort i getTailLenght.
Citera
2024-01-04, 03:41
  #6
Medlem
Jag brukar alltid printa ut saker i alla metoder och funktioner för att kunna spåra var saker går fel
Citera
2024-01-04, 08:18
  #7
Medlem
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());
    }

}
public String toString() {
return String.format ("%s, %s, %d år, %d kg, tail=%.2f", name, breed, age, weight, getTailLength());
}

}
Måste vara på den här raden tror jag, du har ingen % avläsning på (år), vet inte varför den inte identifieras som "age" heller för den delen? Kanske är något annat i koden som svarar till år?
Citera
2024-01-04, 09:16
  #8
Medlem
invandrar-leffes avatar
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.
Citera
2024-01-04, 09:47
  #9
Medlem
SvenHelsings avatar
Det är en bra idé om du svarar på frågor TS.

Citat:
Ursprungligen postat av invandrar-leffe
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.
Ser inget konstigt med det alls och det ingår förmodligen i uppgiften som har automatiska tester. Det är för att ingen någonsin blir yngre.
Citera
2024-01-04, 12:43
  #10
Medlem
roleones avatar
Citat:
Ursprungligen postat av telemarketguden
Jag har en skoluppgift som jag verkligen inte lyckas knäcka

Helt ärligt dock: fråga din lärare, inte flashback. Det är därför ni har dem.
Citera
2024-01-04, 15:24
  #11
Medlem
invandrar-leffes avatar
Citat:
Ursprungligen postat av SvenHelsing
Det är en bra idé om du svarar på frågor TS.


Ser inget konstigt med det alls och det ingår förmodligen i uppgiften som har automatiska tester. Det är för att ingen någonsin blir yngre.

Nej, men det kan ju hända att fel ålder matas in och och då är det ju bra om det går att korrigera men som sagt mycket bättre att lagra födelsedatum . . . så som man skulle göra om det var ett program som ska användas på riktigt.
Citera
2024-01-04, 16:02
  #12
Medlem
SvenHelsings avatar
Citat:
Ursprungligen postat av invandrar-leffe
Nej, men det kan ju hända att fel ålder matas in och och då är det ju bra om det går att korrigera men som sagt mycket bättre att lagra födelsedatum . . . så som man skulle göra om det var ett program som ska användas på riktigt.
Det beror helt på sammanhang. Det är väldigt vanligt att man kan sätta ett värde i konstruktorn, och sedan modifiera det med vissa villkor senare. Skulle vilja påstå att det är väldigt sällan man upptäcker att man satt en variabel fel och kan fixa till det.

Däremot hade det förmodligen varit lämpligare med funktion i stil med increaseAge(int da) { this.age += da; }

Men allt tyder på att TS helt enkelt har skrivit sin kod enligt en spec i uppgiften som ska passera automatiska tester så det är ju rätt irrelevant egentligen. Men utan mer input från TS ser jag inte riktigt hur man ska kunna hjälpa till.
__________________
Senast redigerad av SvenHelsing 2024-01-04 kl. 16:09.
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in