C# skriva ut sista index position i en vektor

Permalänk

C# skriva ut sista index position i en vektor

using System; namespace Bussen { class Program { class Bus { public int[] passengers; // vektor med plats för passagerare i form av värden (åldrar) public int numberOfPassengers; // variabel som används för att bestämma vektorns storlek public void Run() { Console.WriteLine("Välkommen till programmet för buss statistik\n"); Console.Write("Hur många passagerare kan åka med idag? Bussen har 50 platser.\n"); do try { numberOfPassengers = Convert.ToInt32(Console.ReadLine()); // läser in värde från användaren som bestämmer storlek på vektor if (numberOfPassengers > 50) // villkorsstyrning för värde som bestämmer storlek på vektor { Console.WriteLine("Det får bara plats 50 personer på bussen!\n"); Console.Write("Hur många passagerare kan åka med idag?\n"); numberOfPassengers--; } else if (numberOfPassengers <=0) { Console.WriteLine("Någon måste väl ändå få åka med?\n"); Console.Write("Hur många passagerare kan åka med idag?"); } } catch (Exception e) // fångar upp om storleken på vektorn är mindre än 0 eller större än 50 { Console.WriteLine("Det får bara plats 50 personer på bussen!\n"); Console.WriteLine("Hur många passagerare kan åka med idag?\n"); numberOfPassengers--; } while (numberOfPassengers <= 0 || numberOfPassengers > 50); // loopar inläsning från användaren tills inläst värde är mellan 1-50 passengers = new int[numberOfPassengers]; // tidigare inläst värde bestämmer storlek på vektor Console.WriteLine("\nVad vill du göra idag?\n"); int menu = 0; // villkor för do-while loop deklareras do { Console.WriteLine("\nVälj alternativ med siffran 1-5: \n"); Console.WriteLine("1. Lägga till passagerare\n"); Console.WriteLine("2. Skriv ut ålder för alla passagerare\n"); Console.WriteLine("3. Beräkna den sammanlagda åldern för alla passagerare\n"); Console.WriteLine("4. Beräkna medelålder för alla passagerare\n"); Console.WriteLine("5. Avsluta programmet\n"); Console.Write("Ditt val:"); menu = int.Parse(Console.ReadLine()); switch (menu) { case 1: AddPassenger(); // fyller vektor med värden break; case 2: PrintAge(); // skriver ut alla åldrar på passagerarna break; case 3: CalcTotalAge(); // skriver ut den sammanlagda åldern av alla passagerare break; case 4: CalcAverageAge(); // skriver ut passagerarnas medelålder break; case 5: Console.WriteLine("Programmet avslutas"); break; default: Console.WriteLine("Felaktig inmatning"); break; } } while (menu != 0); // villkor för när do-while loop avslutas } public void AddPassenger() { for (int y = 0; y < passengers.Length; y++) { Random newNumber = new Random(); int newPassenger = newNumber.Next(1, 85); passengers[y] = newPassenger; } Console.WriteLine("\nAlla passagerare har nu klivit på:"); foreach (int age in passengers) Console.WriteLine(age); } public void PrintAge() { int passengerNr = 1; foreach (int age in passengers) { Console.WriteLine("\nPassagerare " + passengerNr++ + " är " + age + " år\n"); } } public void CalcTotalAge() { int sum = 0; for (int y=0; y < passengers.Length; y++) { sum += passengers[y]; Console.WriteLine(); } } public void CalcAverageAge() { int sum = 0; // Instansierar sum till värdet 0 double sum1 = 0; // instansierar sum1 till värdet 0 double sum2 = 0; for (int y = 0; y < passengers.Length; y++) // tilldelar vektor värden { sum += passengers[y]; // lägger ihop värden i vektor med värdet för sum som är 0 sum1 = (double)sum; // typomvandlar int sum till double sum1 = sum / passengers.Length; // delar totalt värde i vektor med vektors längd sum2 = Math.Round(sum1, 1); Console.WriteLine("Passagerarnas medelålder är " + sum1 + " år"); // skriver ut medelåldern } } static void Main(string[] args) { var myBus = new Bus(); myBus.Run(); Console.ReadKey(); } } } }

Permalänk

Hur kan jag i metoderna CalcTotalAge och CalcAverageAge göra så att det endast är den sista indexpositionen som skrivs ut? I CalcTotalAge om jag skriver att console.writeline ska skriva ut sum så skriver den ut alla värden efter varandra och adderar ihop dom eftersom. Så det sista numret blir den totala åldern men det är endast det talet jag vill som ska skrivas ut.

I CalcAverageAge får jag samma, alla medeltal skrivs ut utifrån värden som lagrats i vektor. Så om vektorn är 5 positioner så delas det första talet med 5, tal 2 adderas med tal 1 och delas med 5, tal 3 adderas med tal 1 & 2 och delas med 5 osv. Jag vill endast skriva ut det sista talet som är det totala medelvärdet.

Vektorns storlek bestäms av användaren i början så den kan variera i storlek beroende på hur många indexpositioner användaren väljer ska skapas.

Permalänk

Du har Console.WriteLine(" ") i for loopen.
den kommer då att skriva en ny rad med den informationen varje "varv" den går.
ta och flytta ut den från for loopen så ska det lösa sig.

var ett tag sedan jag skrev i c# men borde stämma.

Permalänk

I CalcTotalAge så gör du Console.WriteLine() i for-loopen så flytta ut den.

public void CalcTotalAge() { int sum = 0; for (int y = 0; y < passengers.Length; y++) { sum += passengers[y]; } Console.WriteLine(sum); }

Permalänk

Enkla svaret är att du har console.writeline inne i en loop. Tänk på vad som sker då. Sen så får det att snygga till calcaverageage. Tänk på vad som går att flytta ut ur loopen. Vissa saker behövs/ ska bara göras en gång

Permalänk

@interouse @HeyItsBlu @HerrNilsson54

Tack som fan, jävla nybörjar misstag man gör. Detta borde jag faktiskt ha kunna upptäcka själv känner jag nu men grön som man är så blir det missar i början.

Tack än en gång

Permalänk
Medlem

@jonasromin: Ett tips är att lära dig hur debuggern fungerar om du inte redan vet det, se t.ex. denna korta introduktion. Med debuggern kan du sätta en brytpunkt i koden du vill undersöka och sen stega igenom den en rad i taget för att se exakt vad som händer när den körs.