Vinnaren i pepparkakshustävlingen!
  • 2
  • 3
2022-03-19, 11:49
  #25
Moderator
Pontiac-Garages avatar
Citat:
Ursprungligen postat av svindelmannen
Förväntade mig att du skulle leda honom mot TryParse
Vilken fördel menar du det ger att använda .net type Int32 i stället för C# keyword int?

Sant, TryParse är förstås att föredra.
Citera
2022-03-27, 03:01
  #26
Medlem
Bonnatorps avatar
Här är koden jag fick ihop:
Kod:
using System;
using System.Collections.Generic;

namespace Joppes_djurfamilj
{
    class Program
    {
        static void Main(string[] args)
        {
            Petowner Joppe = new Petowner(25);
            Joppe.Menu();
        }
    }
    class Petowner
    {
        private int age { get; set; }
        private List<Animal> animal_List = new List<Animal>();

        public Petowner(int age)
        {
            animal_List.Add(new Cat("Oscar", 15, "fish"));
            animal_List.Add(new Dog("Fido", 10, "meat"));
            animal_List.Add(new Puppy("Wilbur", 6, "dogtreats"));
            animal_List.Add(new Animal("Sven", 40, "pizza"));
        }
        public void List_Animals()
        {
            Console.WriteLine("These are Joppe's animals:\n");
            foreach (var animal in animal_List)
            {
                Console.WriteLine(animal);
            }
            Console.WriteLine("\nPress any button to go back to the menu.");
            Console.ReadKey();
            Console.Clear();
        }
        public void Play()
        {
            Console.WriteLine("Which animal do you want to play with?");
            int i = 1;
            foreach (var animal in animal_List)
            {
                Console.WriteLine(i + " - " + animal);
                i++;
            }
            Console.Write("Your choice: ");
            int Answer = int.Parse(Console.ReadLine());
            if (Answer == 1)
            {
                Console.WriteLine("Joppe is playing with {0}", animal_List[0]);
                animal_List[0].Interact();
            }
            if (Answer == 2)
            {
                Console.WriteLine("Joppe is playing with {0}", animal_List[1]);
                animal_List[1].Interact();
            }
            if (Answer == 3)
            {
                Console.WriteLine("Joppe is playing with {0}", animal_List[2]);
                animal_List[2].Interact();
            }
            if (Answer == 4)
            {
                Console.WriteLine("Joppe is playing chess with {0}", animal_List[3]);
                animal_List[3].Interact();
            }
            Console.WriteLine("\nPress any button to return to the menu.");
            Console.ReadKey();
            Menu();
        }
        public void Feed()
        {
            Console.WriteLine("Which animal do you want to feed?");
            int i = 1;
            foreach (var animal in animal_List)
            {
                Console.WriteLine(i + " - " + animal);
                i++;
            }
            int answer = 0;
            try
            {
                answer = int.Parse(Console.ReadLine());
            }
            catch (Exception)
            {
                Console.WriteLine("You must choose a pet from one of the numbers.");
            }
            
            Food_Menu(answer - 1);

            void Food_Menu(int animal)
            {
                Console.WriteLine("What do you want to feed {0}?", animal_List[animal]);
                Console.WriteLine("1 - Fish");
                Console.WriteLine("2 - Meat");
                Console.WriteLine("3 - Dogtreats");
                Console.WriteLine("4 - Pizza");
                try
                {
                    answer = int.Parse(Console.ReadLine());
                }
                catch (Exception)
                {
                    Console.WriteLine("You must choose a pet from one of the numbers.");
                }

                if ((answer == 1 && animal == 0) ||
                    (answer == 2 && animal == 1) ||
                    (answer == 3 && animal == 2) ||
                    (answer == 4 && animal == 3))
                {
                    Console.WriteLine(animal_List[animal] + " eats the food and get full.");
                    animal_List[animal].Eat();
                }
                else
                {
                    Console.WriteLine(animal_List[animal] + " doesn't eat much.");
                    animal_List[animal].Hungry_Animal();
                }
                Console.WriteLine("\nPress any button to return to the menu.");
                Console.ReadKey();
                Menu();
            }
        }
        
        public void Menu()
        {
            Console.Clear ();
            int menu = 0;
            do
            {
                Console.WriteLine("Welcome to Joppe's friendly animal family.\n" +
                    "Please choose an option from the menu.");
                Console.WriteLine("1 - Play with animals");
                Console.WriteLine("2 - Feed animals");
                Console.WriteLine("3 - Show a list of the animals");
                Console.WriteLine("4 - Exit program");

                menu = int.Parse(Console.ReadLine());
                switch (menu)
                {
                    case 1:
                        Play();
                        break;
                    case 2:
                        Feed();
                        break;
                    case 3:
                        List_Animals();
                        break;
                    case 4:
                        Console.Clear();
                        Console.WriteLine("Press any button to exit the program...");
                        Console.ReadKey();
                        break;
                    default:
                        break;
                }
            } while (menu != 4);
        }
        public override string ToString()
        {
            return String.Format("Joppe");
        }
        
    }
    
    class Animal
    {
        protected int age { get; set; }
        protected string name { get; set; }
        protected string fav_food { get; set; }
        protected string breed { get; set; }
        protected bool hungry { get; set; } = true;
        public Animal(string name, int age, string fav_food)
        {
        
        }
        public virtual void Interact()
        {
            if (hungry == true)
            {
                Console.WriteLine("Sven can't focus because of hunger, and loses the game.\n" +
                    "He proceeds to remind you that starving pets is illegal.");
            }
            if (hungry == false)
            {
                Console.WriteLine("Sven wins the game, since he is by nature a logical thinker.");
            }
        }
        public void Eat()
        {
            hungry = false;
        }
        public virtual void Hungry_Animal()
        {
            Console.WriteLine("Sven reminds you that it is customary to feed your pets.");
        }
        public override string ToString()
        {
            return String.Format("Sven");
        }
    }

    class Cat : Animal
    {
        public Cat(string name, int age, string fav_food) : base(name, age, fav_food)
        {
            this.name = name;
            this.age = age;
            this.fav_food = fav_food;
        }
        public override void Interact()
        {
            if (hungry == true)
            {
                Console.WriteLine(name + " is too hungry to play.");
            }
            if (hungry == false)
            {
                Console.WriteLine(name + " zooms back and forth, chasing a laser dot.");
            }
        }
        public override void Hungry_Animal()
        {
            Random random = new Random();
            int hunt = random.Next(0, 2);
            if (hunt == 0)
            {
                Console.Write("{0} found a mouse and is now full!", name);
                hungry = false;
            }
            if (hunt == 1)
            {
                Console.Write("{0} did not find any mouse, and is still hungry.", name);
            }
        }
        public override string ToString()
        {
            return String.Format("Oscar");
        }
    }
    class Dog : Animal
    {
        public Dog(string name, int age, string fav_food) : base(name, age, fav_food)
        {
            this.name = name;
            this.age = age;
            this.fav_food = fav_food;
        }
        public override void Hungry_Animal()
        {
            Console.WriteLine(name + " whimpers because he is hungry.");
        }
        public override void Interact()
        {
            if (hungry == true)
            {
                Console.WriteLine(name + " is too hungry to play.");
            }
            if (hungry == false)
            {
                Console.WriteLine(name + " chases the ball you threw, and return with it.");
            }
        }
        public override string ToString()
        {
            return String.Format("Fido");
        }
    }

    class Puppy : Dog
    {
        public Puppy(string name, int age, string fav_food) : base(name, age, fav_food)
        {
            this.name = name;
            this.age = age;
            this.fav_food = fav_food;
        }
        public override void Hungry_Animal()
        {
            Console.WriteLine(name + " whimpers because he is hungry.");
        }
        public override void Interact()
        {
            if (hungry == true)
            {
                Console.WriteLine(name + " is too hungry to play.");
            }
            if (hungry == false)
            {
                Console.WriteLine(name + " runs around so fast he stumbles on his big ears.");
            }
        }
        public override string ToString()
        {
            return String.Format("Wilbur");
        }
    }
}
Citera
2022-03-27, 03:02
  #27
Medlem
Bonnatorps avatar
Det fick bli dubbelpost, då koden blev på runt 10.000 tecken.

Jag sitter på samma uppgift, och efter någon timmes hårslitande så tror jag att jag i princip är färdig.
Däremot lyckades jag inte få till det med att faktiskt använda variabeln fav_food på ett vettigt sätt, utan gjorde en fuling med en switch i metoden Food_Menu istället.
Fungerar i dagsläget, superklumpigt om man vill expandera antalet djur.

Här är själva uppgiftsbeskrivningen, ifall någon vill tillgå den:
https://antbring.files.wordpress.com...rfamilj-v2.pdf

Någon som har ett tips på hur jag kan lösa den sista biten vettigt, eller ska jag hoppas på det bästa och bara lämna in rasket?
Jag har rätt så god tidsmarginal, så jag har väl egentligen tid att vänta på läraren en vecka eller två.
Citera
2022-03-27, 16:07
  #28
Medlem
Citat:
Ursprungligen postat av Bonnatorp
Det fick bli dubbelpost, då koden blev på runt 10.000 tecken.

Jag sitter på samma uppgift, och efter någon timmes hårslitande så tror jag att jag i princip är färdig.
Däremot lyckades jag inte få till det med att faktiskt använda variabeln fav_food på ett vettigt sätt, utan gjorde en fuling med en switch i metoden Food_Menu istället.
Fungerar i dagsläget, superklumpigt om man vill expandera antalet djur.

Här är själva uppgiftsbeskrivningen, ifall någon vill tillgå den:
https://antbring.files.wordpress.com...rfamilj-v2.pdf

Någon som har ett tips på hur jag kan lösa den sista biten vettigt, eller ska jag hoppas på det bästa och bara lämna in rasket?
Jag har rätt så god tidsmarginal, så jag har väl egentligen tid att vänta på läraren en vecka eller två.

Lägg de olika rätterna i en lista och jämför värdet med det valda djurets favoritmat.
Kod:
if (foodItems[answer] == animal.fav_food)
Citera
2022-03-27, 17:45
  #29
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Bonnatorp
Det fick bli dubbelpost, då koden blev på runt 10.000 tecken.

Jag sitter på samma uppgift, och efter någon timmes hårslitande så tror jag att jag i princip är färdig.
Däremot lyckades jag inte få till det med att faktiskt använda variabeln fav_food på ett vettigt sätt, utan gjorde en fuling med en switch i metoden Food_Menu istället.
Fungerar i dagsläget, superklumpigt om man vill expandera antalet djur.

Här är själva uppgiftsbeskrivningen, ifall någon vill tillgå den:
https://antbring.files.wordpress.com...rfamilj-v2.pdf

Någon som har ett tips på hur jag kan lösa den sista biten vettigt, eller ska jag hoppas på det bästa och bara lämna in rasket?
Jag har rätt så god tidsmarginal, så jag har väl egentligen tid att vänta på läraren en vecka eller två.
Du har kommit långt, bra jobbat!

Men du har lite hårdkodade val och liknande i din kod, det kan inte vara meningen på den här nivån?
T.ex:
Kod:
Console.WriteLine("What do you want to feed {0}?"animal_List[animal]);
                
Console.WriteLine("1 - Fish");
                
Console.WriteLine("2 - Meat");
                
Console.WriteLine("3 - Dogtreats");
                
Console.WriteLine("4 - Pizza");
                try
                {
                    
answer int.Parse(Console.ReadLine());
                }
                catch (
Exception)
                {
                    
Console.WriteLine("You must choose a pet from one of the numbers.");
                }

                if ((
answer == && animal == 0) ||
                    (
answer == && animal == 1) ||
                    (
answer == && animal == 2) ||
                    (
answer == && animal == 3))
                { 

Poängen med att göra objektorienterad kod är ju man ska kunna lägga till hur många objekt som helst, och då kan man inte hårdkoda menyer som i Console.Writeline-delen ovan och ”facit” som if-satsen ovan.

Iterera istället genom de objekt som finns och hämta favoritmaten från respektive objekt för att skapa själva menyn. Du får samtidigt facit (alltså vilket djur som har vilken favoritmat). I båda fallen sparar man informationen i en lista.
__________________
Senast redigerad av Enterprise 2022-03-27 kl. 17:47.
Citera
2022-03-27, 20:03
  #30
Medlem
Bonnatorps avatar
Citat:
Ursprungligen postat av erkki17
Lägg de olika rätterna i en lista och jämför värdet med det valda djurets favoritmat.
Kod:
if (foodItems[answer] == animal.fav_food)

Citat:
Ursprungligen postat av Enterprise
Du har kommit långt, bra jobbat!

Men du har lite hårdkodade val och liknande i din kod, det kan inte vara meningen på den här nivån?
T.ex:
Kod:
Console.WriteLine("What do you want to feed {0}?"animal_List[animal]);
                
Console.WriteLine("1 - Fish");
                
Console.WriteLine("2 - Meat");
                
Console.WriteLine("3 - Dogtreats");
                
Console.WriteLine("4 - Pizza");
                try
                {
                    
answer int.Parse(Console.ReadLine());
                }
                catch (
Exception)
                {
                    
Console.WriteLine("You must choose a pet from one of the numbers.");
                }

                if ((
answer == && animal == 0) ||
                    (
answer == && animal == 1) ||
                    (
answer == && animal == 2) ||
                    (
answer == && animal == 3))
                { 

Poängen med att göra objektorienterad kod är ju man ska kunna lägga till hur många objekt som helst, och då kan man inte hårdkoda menyer som i Console.Writeline-delen ovan och ”facit” som if-satsen ovan.

Iterera istället genom de objekt som finns och hämta favoritmaten från respektive objekt för att skapa själva menyn. Du får samtidigt facit (alltså vilket djur som har vilken favoritmat). I båda fallen sparar man informationen i en lista.
Tack för båda svar, torde inte ta mer än en timme att fixa det och kommentera hela rasket så är jag nästan färdig för kursen då.
Blir bara till att skriva planering för uppgiften, vilket jag alltid gör efter att den är färdig.

Programmering 2 var ändå inte så blodigt att klara av, jag hade hört att det skulle vara hästlängder svårare.
Dock vet jag att jag har stora brister i lite mer avancerad OOP-kunskap, så jag kanske får bannor för det på muntliga.
Citera
2022-03-27, 22:49
  #31
Medlem
Citat:
Ursprungligen postat av Bonnatorp
Tack för båda svar, torde inte ta mer än en timme att fixa det och kommentera hela rasket så är jag nästan färdig för kursen då.
Blir bara till att skriva planering för uppgiften, vilket jag alltid gör efter att den är färdig.

Programmering 2 var ändå inte så blodigt att klara av, jag hade hört att det skulle vara hästlängder svårare.
Dock vet jag att jag har stora brister i lite mer avancerad OOP-kunskap, så jag kanske får bannor för det på muntliga.

Andra saker att tänka på:
Du behöver bara implementera metoder som ärvs från basklassen om den ska göra något annorlunda.
T.ex. behöver du inte implementera Hungry_Animal i klassen Puppy eftersom den är identisk med den i klassen Dog.

Du behöver heller inte implementera ToString där du endast hårdkodar en utskrift av djurets namn (som förblir detsamma även om du skulle skapa en instans med annat namn). Bättre då att i basklassen implementera så att den helt enkelt skriver ut värdet på attributet name, exempelvis.

Sedan räcker det gott och väl att skriva
Kod:
if (myBoolean)
istället för
Kod:
if (myBoolean == true)
Citera
2022-03-27, 23:54
  #32
Moderator
Pontiac-Garages avatar
Vilken nivå är denna kurs på?
Citera
2022-03-27, 23:56
  #33
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av Pontiac-Garage
Vilken nivå är denna kurs på?
Gymnasialt?
https://www.bokus.com/bok/9789140696...rammering-2-c/
Citera
2022-03-28, 00:01
  #34
Moderator
Pontiac-Garages avatar
Citat:
Ursprungligen postat av Enterprise
Gymnasialt?
https://www.bokus.com/bok/9789140696...rammering-2-c/

Såg att ”Programmering 2” även fanns som högskolekurs så därav att frågan dök upp.
Citera
  • 2
  • 3

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