2 svar
470 visningar
Ahmad94 37
Postad: 11 feb 2023 17:52

programmering 2 , arv

Frågan
För att öva på arv i förberedelser för den större uppgiften ovan så ska du här lämna in följande uppgift. Skapa en klass som heter fordon och som har följande fält:

1. hästkrafter
2. färg
Denna klass ska ha en lämplig konstruktor och en metod som beräknar maxhastigheten för fordonet.

Vidare kan du lägga till en valfri metod som exempelvis att fordonet "tutar".

Maxhastigheten baseras på hästkrafter med en lämplig formel.

Metoden för att beräkna tophastigheten är kursiv i UML:et vilket innebär att den är virtuell.

Skapa ytterigare en klass som heter lastbil och som ärver av fordon. I denna klass finns ytterligare ett fält som heter last.

Maxhastigheten för lastbil beräknas utifrån hästkrafter och last på ett lämpligt sätt.

Observera att formeln inte på något sätt behöver vara realistisk. Det är principen med kodningen som är det viktiga.
--------------------------------------------------------------------------------------------------------------------------------------------
Problem

Jag har skrivit koden och lyckades att få den funka i början, men när man väljer 1 eller 2, och matar in hästkraft, då om man skriver in ett bokstav istället för en siffra då programmet slutar, jag försökte att fixa try och Catch för att få programmet slutar på ett bättre sätt men det gick inte.

Och programmet skriver ut SNÄLLA BARA SIFFROR om man matar in bokstav eller VÄLJ BARA EN AV DESSA ALTERNATIV om man väljer mer 2 , men när man beräknar bilen eller lastbilens hastighet, då efter detta om man matar in bokstav eller mer 2 då programmet kör direkt det sista switch case som kördes.
Tusen tack för hjälpen.

 internal class class1
    {
        public static void Main(string[] args)
        {
            int meny = 0;
            do
            {
               for (int i = 0;i> meny; i++)
                    Console.WriteLine("****************************************************");
                    Console.WriteLine("Välkommen till beräknare maxhastigheten ");
                    Console.WriteLine("----------------------------------------------------------------------------");
                    Console.WriteLine("1. Tryck ett för att beräkna en vanlig bil maxhastighet ");
                    Console.WriteLine("2. Tryck två för att beräkna lastbilens hastighet ");
              
                    Console.WriteLine("0. Tryck två gånger på noll för att logga ut av programmet");
                try { 

            meny     = int.Parse(Console.ReadLine());
                }
                catch {
                    Console.WriteLine("Snälla bara siffror");
                meny--;
                }

               
                switch (meny)
                {

                    case 1:
                        Console.Clear();
                        Console.WriteLine("Skriv in hur många hästkraft har din bil:");
                        int horsepower = int.Parse(Console.ReadLine());
                        Fordon fordon = new Fordon(horsepower, "", 0);
                        fordon.calc_topspeed();
                        break;
                      

                       
                    case 2:
                        Console.Clear();
                        Console.WriteLine("Skriv in lastbilens hästkraft");
                        horsepower = int.Parse(Console.ReadLine());
                        Console.WriteLine("Vikt av din last bil");
                        int Last = int.Parse(Console.ReadLine());
                        Lastbil lastbil = new Lastbil(horsepower, "", 0, Last);
                        lastbil.calc_topspeed();
                        break;

                    case 0:
                        Console.WriteLine("Tryck på random knapp");
                        break;

                    //default:
                    //    Console.WriteLine("Välj bara en av dessa alternativ");
                    //    break;
                   
                }
              
                    if (meny > 2)
                    {
                        Console.WriteLine("Välj bara en av dessa alternativ");
                    }

                
               
            } while(meny != 0);
        }

            class  Fordon
        {
            protected int Horsepower { get; set; }
            protected string Color { get; set; }
            public int SPEED { get; set; }
            
            public Fordon(int horsepower, string color, int speed =0)
            {
                Horsepower = horsepower;
                color = Color;
                speed = SPEED;
            }
            public virtual int calc_topspeed()
            {
                SPEED = Horsepower * 2;
                Console.WriteLine($"Din bils maxhastighet är {SPEED} jämfört med hästkraft");
                return SPEED;

            }
            //public void Horn()
            //{
            //    Console.WriteLine("hejjjjjj");

            //}
        }

        private class Lastbil : Fordon
        {
           

            private int Last { get; set; } 

            public Lastbil(int horsepower, string color, int speed , int last) : base (horsepower, color, speed) 
            {
                Last= last;
              
            }
          
            
            public override int calc_topspeed()
            {
                
                SPEED =  (Horsepower + Last) /3  ;
             
                Console.WriteLine($"din last bil speed är {SPEED}");
                 return SPEED;
            }
        }

    }
anders_k 237
Postad: 11 feb 2023 18:42

Hej, du kan pröva med att använda TryParse istället

do
{
  if (!int.TryParse(Console.ReadLine (), out meny))
  {
    Console.WriteLine("0,1 eller 2 - försök igen");
    meny = -1;
  }
}
while (meny < 0 || meny > 2);

Sedan har du ett litet fel i din Fordon constructor, det skall vara

public Fordon(int horsepower, string color, int speed =0)
{
  Horsepower = horsepower;
  Color = color;
  SPEED = speed;
}
Ahmad94 37
Postad: 13 feb 2023 00:09 Redigerad: 13 feb 2023 00:09
anders_k skrev:

Hej, du kan pröva med att använda TryParse istället

do
{
  if (!int.TryParse(Console.ReadLine (), out meny))
  {
    Console.WriteLine("0,1 eller 2 - försök igen");
    meny = -1;
  }
}
while (meny < 0 || meny > 2);

Sedan har du ett litet fel i din Fordon constructor, det skall vara

public Fordon(int horsepower, string color, int speed =0)
{
  Horsepower = horsepower;
  Color = color;
  SPEED = speed;
}

Tusen tack för hjälpen, nu koden fungerar bra :)

 internal class class1
    {
        public static void Main(string[] args)
        {
           //Här skapade jag en variable för SWITCH case.
            int meny = 0;
            do
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                for (int i = 0;i> meny; i++)

                    Console.WriteLine("****************************************************");
                    Console.WriteLine("Välkommen till beräknare maxhastigheten ");
                    Console.WriteLine("");
                    Console.WriteLine("1. Tryck ett för att beräkna en vanlig bil maxhastighet ");
                    Console.WriteLine("2. Tryck två för att beräkna lastbilens hastighet ");
                    Console.WriteLine("3. Tryck tre för att få bilen tuta");
                    Console.WriteLine("0. Tryck på noll för att logga ut av programmet");
             


                /*Här i början försökte jag TRY och Catchn men koden fungerade inte som den måste vara.
                 Sen fick jag reda på att jag måste använda TRYPARSE, så med tryparse koden kraschar inte
               fel inmatning nu */

                    do
                    {
                        if (!int.TryParse(Console.ReadLine(), out meny))
                        {
                            Console.WriteLine("Snälla bara siffror");
                            meny = -1;
                        }
                    } while (meny < 0  );
            

                int horsepower;
                string color;
                switch (meny)
                {

                    case 1:
                        Console.Clear();
                        Console.ForegroundColor = ConsoleColor.Blue;
                        Console.WriteLine("Skriv in hur många hästkraft har din bil:");
                        /* Samma processen som funkade med den första omvandlingen, funkade här också*/
                        do
                        {
                            if (!int.TryParse(Console.ReadLine(), out horsepower))
                            {
                               Console.WriteLine("Mata in bara siffror");
                                horsepower = -1;
                            }
                        } while (horsepower < 0);

                            Console.WriteLine("Vilken färg har din bil ?");
                             color = Console.ReadLine();

                        if (color =="")
                        {
                            Console.WriteLine("Du har angett bilens färg!");
                        }
                            Fordon fordon = new Fordon(horsepower, color, 0);
                            fordon.calc_topspeed();
                             break;
                           
                        
                      

                    case 2:
                        Console.Clear();
                        Console.ForegroundColor = ConsoleColor.Cyan;
                        Console.WriteLine("Skriv in lastbilens hästkraft");
                        do {
                            if (!int.TryParse(Console.ReadLine(), out horsepower))
                            {
                                Console.WriteLine("Mata in bara siffror");
                                horsepower = -1;
                            }
                        }while (horsepower < 0);    

                      
                        Console.WriteLine("Vikt av din last bil?");
                        int Last;
                        do
                        {
                            if (!int.TryParse(Console.ReadLine(), out Last))
                                {
                                Console.WriteLine("Mata in bara siffror");
                                Last = -1;
                                }
                        }while(Last < 0);

                        Console.WriteLine("Vilken färg har din lastbil?");
                        color = Console.ReadLine();
                        if (color.Trim() == "")
                        {
                            Console.WriteLine("Du har inte angett bilen färg!");

                        }
                      
                            Lastbil lastbil = new Lastbil(horsepower, color, 0, Last);
                            lastbil.calc_topspeed();
                            break;


                    case 3:
                        Fordon fordon1 = new Fordon(0, "", 0);
                        fordon1.Horn();
                        break;

                    case 0:
                        Console.WriteLine("Tryck på random knapp");
                        break;
                    
                }
                if (meny > 3)
                {

                    Console.WriteLine("Välj bara en av dessa alternativ som mellan 0-3");
                    Console.WriteLine("*************************************************************");
                  
                }

            } while(meny != 0);
          
        }

            class  Fordon
            {
            protected int Horsepower { get; set; }
            protected string Color { get; set; }
            public int SPEED { get; set; }
            
            public Fordon(int horsepower, string color, int speed =0)
            {
                Horsepower = horsepower;
                Color = color;
                SPEED = speed;
            }

            /* Man kan göra den här metoden också som INT och retunera SPEED.*/
            public virtual void calc_topspeed()
            {
                SPEED = Horsepower * 2;
                Console.WriteLine($"Den {Color} bilen har {SPEED} för maxhastigheten");
                Console.WriteLine("**********************************************************");
             
            }
            public void Horn()
            {
                /* Här skapade en soundplayer´, genom att lägga till (USING SYSYTEM. MEDIA)
                 * och bifoga wav file till koden, så istället för visa på skärmen att bilen tutar
                 * kommer att spela ett ljud som liknar bilens horn.*/

                SoundPlayer spa = new SoundPlayer("1.wav.wav");
                spa.Play();
                Console.WriteLine("*****************************************************************");
            }
        }

        private class Lastbil : Fordon
        {
            private int Last { get; set; } 
            public Lastbil(int horsepower, string color, int speed , int last) : base (horsepower, color, speed) 
            {
                Last= last;
            }
          
            public override void calc_topspeed()
            {
                SPEED = (Horsepower + Last) / 5;
                Console.WriteLine($"Den {Color} lastbilen har {SPEED} för maxhastigheten");
                Console.WriteLine("********************************************************************");

            }
        }

    }
}

Svara
Close