2 svar
301 visningar
syon901 är nöjd med hjälpen
syon901 4 – Fd. Medlem
Postad: 3 maj 2021 03:27

Värden skrivs över i vektor (uppgift bussen)

Hej!

Jag har de senaste dygnen arbetat med uppgiften bussen. Det mesta verkar funka men här är en del jag inte lyckas lösa. 

Exempel: Jag har 25 platser i min buss, jag fyller upp 3 platser [0][1][2]. Allt fungerar fint - jag kan sortera efter ålder osv. Men så fort jag väljer att fylla på med ytterligare 3 platser så skrivs dem in [3][4][5] och de  första 3 återgår till 0?

  class Buss
    {
        public int[] passenger = new int[25]; //vektor deklarerad
        public int new_passengers; //int där vi lägger det vi använder från vektorn
        public void Run()

        {
            Console.WriteLine("***************************");
            Console.WriteLine("Welcome to the bus!");
            Console.WriteLine("***************************");
            Console.WriteLine(" ");
            Console.WriteLine(" ");
            Console.WriteLine(" ");
            int menu; //int meny deklareras
            do
            {
                Console.WriteLine("***************************************************"); //menyn användaren ser
                Console.WriteLine("Chose an action:");
                Console.WriteLine("***************************************************");
                Console.WriteLine("1. Add passenger");
                Console.WriteLine("2. Check the age of all passengers.");
                Console.WriteLine("3. Calculate the total age of all passengers.");
                Console.WriteLine("4. Calculate the average age of the passengers.");
                Console.WriteLine("5. Identify the oldest passenger.");
                Console.WriteLine("6. Identify the youngest passenger.");
                Console.WriteLine("7. Identify passengers between chosen ages.");
                Console.WriteLine("8. Sort passengers after age. ");
                Console.WriteLine("0. Quit program. ");
                Console.WriteLine("***************************************************");
                Console.WriteLine(" ");


                menu = int.Parse(Console.ReadLine()); //översätter string till int


                switch (menu) //switch case meny 
                {
                    case 1:
                        Add_passenger();
                        break;

                    case 2:
                        Print_buss();
                        break;

                    case 3:
                        Calc_total_age();
                        break;

                    case 4:
                        Calc_average_age();
                        break;

                    case 5:
                        Max_age();
                        break;

                    case 6:
                        Min_age();
                        break;

                    case 7:
                        Find_age();
                        break;

                    case 8:
                        Sort_buss();
                        break;

                    case 0:
                        menu = 0;
                        break;

                    default:
                        Console.WriteLine("This action is not available, please try again by typing a number from the menu (0 - 8).");
                        break;
                }

            } while (menu != 0); //avslutas! 
        }
        public void Add_passenger() //metod för att lägga till passagerare 
        {
            Console.WriteLine("How many passengers would you like to add?");
            try //try catch för att vi endast vill ha siffror 
            {
                int size = Convert.ToInt32(Console.ReadLine());
                if (size > 25) //endast siffror under 25 är ok 
                {
                    Console.WriteLine("The bus doesn't have that many seats available, sorry."); //annars skrivs detta ut
                }
                else //om de skriver siffror under 25
                {
                    for (int i = 0; i < size; i++) //så körs for-loopen
                    {
                        Console.WriteLine("Add a passenger by writing the age: ");
                        int added_passengers = Convert.ToInt32(Console.ReadLine()); //översätt svaret till int och lagra i vår variabel
                        passenger[i] = added_passengers; //lagra i vektorn
                        new_passengers++; //kör om på nytt                     
                    }
                }
            }
            catch
            {
                Console.WriteLine("You can only type in the passengers age, please try again."); //visas om de skriver bokstäver 
            }
        }

        public void Print_buss() //metod för att skriva ut alla passagerare 
        {
            for (int i = 0; i < new_passengers; i++) //for-loop som kör igenom alla_passagerare-variabeln

            {
                Console.WriteLine("This passenger is " + passenger[i] + " years old."); //skriver ut passagerarna i vektorn
                Console.WriteLine(" ");
            }
        }

        public void Calc_total_age() //metod för att räkna alla passagerares ålder
        {
            int sum = 0;
            for (int i = 0; i < new_passengers; i++) //for-loop som kör igenom alla_passagerare-variabeln
            {
                sum += passenger[i]; //läser in passagerarna från vektorn & adderar och lägger in i variabeln sum
            }
            Console.WriteLine("The total age of the passengers is " + sum + ".");
            Console.WriteLine(" ");
        }
        public void Calc_average_age() //metod för att räkna ut medelåldern
        {
            int sum = 0;
            for (int i = 0; i < new_passengers; i++) //for-loop som kör igenom alla_passagerare-variabeln
            {
                sum += passenger[i]; //läser in passagerarna från vektorn & adderar och lägger in i variabeln sum
            }
            double dsum = Convert.ToDouble(sum); //översätter till en double 
            double dsum1 = dsum / new_passengers; //räknar ut medelåldern
            Console.WriteLine("The passengers average age sums up to " + dsum1 + " years old.");
            Console.WriteLine(" ");
        }
        public int Max_age() //metod för att räkna ut maxåldern
        {
            int maxAge = 0; //ny variabel
            for (int i = 0; i < new_passengers; i++) //for-loop som kör igenom alla_passagerare-variabeln
            {
                if (passenger[i] > maxAge)
                {
                    maxAge = passenger[i]; //lägger alla i vektorn i variabeln maxAge
                }
            }
            Console.WriteLine("The oldest passenger is " + maxAge + " years old.");
            Console.WriteLine(" ");
            return maxAge;
        }

        public int Min_age() //metod för att räkna ut minåldern
        {
            int minAge = 2000; //ny variabel
            for (int i = 0; i < new_passengers; i++) //for-loop som kör igenom alla_passagerare-variabeln
            {
                if (passenger[i] < minAge)
                {
                    minAge = passenger[i]; //lägger alla i vektorn i variabeln minAge
                }
            }
            Console.WriteLine("The youngest passenger is " + minAge + " years old.");
            Console.WriteLine(" ");
            return minAge;
        }

        public void Find_age()
        {
            {
                Console.WriteLine("Whats the youngest age you want to search for?"); //användaren får välja lägsta ålder
                int low = Convert.ToInt32(Console.ReadLine()); //lagrar i int
                Console.WriteLine("Whats the oldest age you want to search for?");
                int high = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Passengers between " + low + " and " + high + " sits on seats: ");
                for (int i = 0; i < new_passengers; i++) //for-loop som kör igenom "alla_passagerare"-variabeln
                {
                    if (passenger[i] > low || passenger[i] > high) //identifierar spannet 
                    {
                        Console.WriteLine("Seat " + i); //skriver ut sätet
                    }
                }
                Console.WriteLine(" ");
                Console.WriteLine("NOTE; There is 25 seats numbered between 0 and 24."); //eftersom det börjar på noll... 
            }
        }
        public void Sort_buss()
        {
            int max = passenger.Length - 1;
            for (int i = 1; i < max; i++)
            {
                int nrLeft = max - i;

                for (int j = 0; j < nrLeft; j++)
                {
                    if (passenger[j] > passenger[j + 1])
                    {
                        int temp = passenger[j];
                        passenger[j] = passenger[j + 1];
                        passenger[j + 1] = temp;
                    }
                }
            }
            for (int i = 1; i < passenger.Length; i++)
                Console.WriteLine(passenger[i]);
        }
        class Program
        {
            static void Main(string[] args)
            {
                var minbuss = new Buss(); //programmet
                minbuss.Run(); //körs
                Console.Write("Press any key to continue...");
                Console.ReadKey(true);
            }
        }
    }
}
Yngve 37796 – Livehjälpare
Postad: 3 maj 2021 07:29 Redigerad: 3 maj 2021 07:40

Nej du skriver över de första tre platserna när du lägger till passagerare.

Detta eftersom du alltid börjar loopen i Add_passenger vid 0.

Ett förslag är att du istället börjar loopen vid new_passengers.

(En annan brist i programmet är att det låter dig lägga till upp till 25 passagerare i taget.)

syon901 4 – Fd. Medlem
Postad: 18 maj 2021 23:43

Tack för hjälpen!

Lyckades lösa det (och ditt extra tips)!    :)

Svara Avbryt
Close