bussen felmeddelanden c# visual studios

Permalänk

bussen felmeddelanden c# visual studios

Hej! Jag är på den sista kodnings uppgiften i programmering 1 (bussen) och har fått upp ett par felmeddelanden jag inte förstår, och det är troligen dom som gör att programmet inte startas. När jag googlar om dessa är svaren så komplicerade att det känns svårt att förstå på min nivå.
Jag har ett error i koden som säger ”Program does not contain a static ”Main” method suitable for an entry point”. Instruktionerna till uppgiften säger: “ Under metoden Run() ska alltså kod skrivas som skriver ut text som välkomnar användaren och därefter får en lista över vilka saker man kan göra.”. Och jag har därför tagit bort Main metoden eftersom den inte används, men är det så att den måste ligga kvar i koden trots att den inte används?
Det andra problemet är två varningar som säger att passagerare [] och antal_passagerare aldrig blir assigned. Ex: "field is never assigned to and will always have its default value null c#". Men jag använder båda i metoderna under och där säger den inte ifrån.
Det finns säkert en massa fler fel i min kod men är svårt att ta reda på dom när jag inte ens får programmet att starta :/
Tack så mycket på förhand!

namespace Bussen { class Buss //en klass med namnet buss { public int[] passagerare; //skapar en vektor som heter passagerare. [] visar att det är en vektor. public int antal_passagerare; //skapar en int med namnet antal_passagerare. Public gör så att man kommer åt innehållet i klassen från andra klasser/metoder. public void Run() //skapar en metod som heter run, här ska menyn ligga { int meny; Console.WriteLine("Välkommen till bussen! Vänligen välj i menyn vad du vill göra."); //startmeddelande till användare do //skapar do while loop { Console.WriteLine("1 Lägg till passagerare"); //alla alternativ i menyn skrivs ut Console.WriteLine("2 Skriv ut alla passagerares ålder"); Console.WriteLine("3 Skriv ut den totala ålderna på alla passagerare"); Console.WriteLine("4 Avsluta programmet"); meny = int.Parse(Console.ReadLine()); //läser in användarens svar switch (meny) { case 1: Add_passenger(); break; case 2: Print_buss(); break; case 3: Calc_total_age(); break; case 4: Avsluta(); break; } } while (meny != 4); //do while loop avslutas när användaren väljer alternativ 4, att avsluta programmet } public void Add_passenger() //metod för att lägga till passagerare { for (int i = antal_passagerare; i < antal_passagerare; i++) //skapar en for loop. om i är mindre än max antal passagerare så adderas index med 1. { if (antal_passagerare > passagerare.Length) //eftersom vektorn passagerare räknar 0-24 och antal_passagerare som är int börjar på 1. { Console.WriteLine("Bussen är full, det går inte att lägga till några fler passagerare."); } else { Console.WriteLine("Du har valt att lägga till en passagerare, vänligen ange passagerarens ålder: "); passagerare[i] = int.Parse(Console.ReadLine()); } } } public void Print_buss() { Console.WriteLine("Alla passagerarnas åldrar är: " + passagerare); //print(passagerare) ? } public void Calc_total_age() { int summa = 0; for (int i = 0; i < passagerare.Length; i++) //inte säker att detta är rätt { summa += passagerare[i]; } Console.WriteLine("Den sammanlagda åldern på alla passagerare är " + summa); } public void Avsluta() { Console.WriteLine("Programmet avslutas."); } } }

Permalänk
Medlem

Main() används garanterat, det är nämligen där programmet börjar köra. Finns det ingen Main() så vet kompilatorn inte var exekveringen skall börja.

Permalänk
Medlem

Du behöver en Main-metod. Ifrån den kan du ropa på din Run-metod.

Ang passagerare arrayen så måste du skapa en instans av den för att kunna använda den. Just nu har du bara deklarerat den.
Du behöver nog också någonstan sätta hur många passagerare en buss kan ha innan du skapar upp arrayen.

antal_passagerare = 42;
passagerare = new int[antal_passagerare];

Permalänk
Medlem
Skrivet av joss:

Du behöver nog också någonstan sätta hur många passagerare en buss kan ha innan du skapar upp arrayen.

antal_passagerare = 42;
passagerare = new int[antal_passagerare];

Baserat på alla andra trådar om denna uppgift så brukar arrayen ges en fast storlek, och sen används antal_passagerare för att hålla reda på antalet passagerare som lagts in i arrayen. antal_passagerare ska med andra ord troligtvis sättas till 0 från början och ökas sedan för varje passagerare som läggs till.

Permalänk

Tack för alla svar!

@Erik_T och @joss. Okej, det visste jag inte! Vi fick ett kodskal i uppgiften som ser ut såhär. Men det låg med i listan för A-nivå så jag trodde därför inte att det var något jag behövde ha med. Men nu tänker jag att jag kanske har missförstått. Ska jag ta med den här kod biten och vart ska jag isåfall lägga den? Jag har provat att lagt in den först i buss klassen men även efter hela klassen men det gör ingen skillnad.

public static void Main(string[] args) { //Skapar ett objekt av klassen Buss som heter minbuss var minbuss = new Buss(); minbuss.Run(); Console.Write("Press any key to continue . . . "); Console.ReadKey(true); }

@perost Ja det ska vara ett max antal på 25 passagerare, jag hade totalt glömt att skriva in det. Jag har gjort om högst upp i koden där jag skapade vektorn men jag får inte till det. får en massa röda sträck överallt, kan du se vad jag har gjort fel?

public int[] passagerare; //skapar en vektor som heter passagerare. antal_passagerare = 25; passagerare = new int[antal_passagerare];

Permalänk
Medlem

Hej!

Titta t.ex här: https://csharpskolan.se/article/falt-array/

int antal_passagerare = 25; int[] passagerare = new int[antal_passagerare];

Permalänk
Medlem

@Hubbiedub: Som jag skrev så ska du sannolikt inte sätta antal_passagerare till 25, utan du kan bara göra:

int[] passagerare = new int[25];

antal_passagerare bör du istället använda för att hålla reda på hur många passagerare som du lagt till (passagerare.Length kommer alltid vara 25, du måste själv hålla reda på hur många platser du fyllt).

Permalänk
Skrivet av perost:

@Hubbiedub: Som jag skrev så ska du sannolikt inte sätta antal_passagerare till 25, utan du kan bara göra:

int[] passagerare = new int[25];

antal_passagerare bör du istället använda för att hålla reda på hur många passagerare som du lagt till (passagerare.Length kommer alltid vara 25, du måste själv hålla reda på hur många platser du fyllt).

oj, ja precis! Vektorn ska alltså ha plats för 25 passagerare. Jag har skrivit såhär nu. Och det är exakt likadant som jag har gjort i en tidigare uppgift men jag får felmeddelandet "the name 'passagerare' does not exist in the current context". Varför blir det så?

public int[] passagerare; passagerare = new int[25]; //ordet passagerare blir röd markerat. Även ";" tecknet efter blir understryket rött. int antal_passagerare = 0;

Permalänk
Medlem

@Hubbiedub: Har du kanske skrivit allt det där direkt i klassen? D.v.s. så här:

namespace Bussen { class Buss //en klass med namnet buss { public int[] passagerare; passagerare = new int[25]; int antal_passagerare = 0; ... } }

Du kan bara ha variabeldeklarationer där, och passagerare = new int[25] är en tilldelning och inte en deklaration. Du kan antingen initialisera variabeln direkt när du deklarerar den:

class Buss { public int[] passagerare = new int[25]; }

Eller dela på det och ha initialiseringen i en metod:

class Buss { public int[] passagerare; public void Run() { passagerare = new int[25]; } }

Permalänk
Skrivet av perost:

@Hubbiedub: Har du kanske skrivit allt det där direkt i klassen? D.v.s. så här:

namespace Bussen { class Buss //en klass med namnet buss { public int[] passagerare; passagerare = new int[25]; int antal_passagerare = 0; ... } }

Du kan bara ha variabeldeklarationer där, och passagerare = new int[25] är en tilldelning och inte en deklaration. Du kan antingen initialisera variabeln direkt när du deklarerar den:

class Buss { public int[] passagerare = new int[25]; }

Eller dela på det och ha initialiseringen i en metod:

class Buss { public int[] passagerare; public void Run() { passagerare = new int[25]; } }

Jag fattar! Jag har flyttat om dom olika delarna som det sista exemplet du skrev, samt flyttat int antal_passagerare = 0; ner till add_passenger metoden. Och då försvann dom felmeddelandena. Jag har dock fortfarande problem med hur jag ska få in main metoden eftersom den säger att jag inte har någon main metod. Såhär ser min kod ut nu men den säger fortfarande att main metoden inte finns. den ligger i class program för det är så det ser ut i exemplet från läraren.

namespace Bussen { class Program { public static void Main(string[] args) { //Skapar ett objekt av klassen Buss som heter minbuss var minbuss = new Buss(); minbuss.Run(); Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } } class Buss //en klass med namnet buss { public int[] passagerare; public void Run() //skapar en metod som heter run, här ska menyn ligga { passagerare = new int[25]; int meny; Console.WriteLine("Välkommen till bussen! Vänligen välj i menyn vad du vill göra."); //startmeddelande till användare do //skapar do while loop { Console.WriteLine("1 Lägg till passagerare"); //alla alternativ i menyn skrivs ut Console.WriteLine("2 Skriv ut alla passagerares ålder"); Console.WriteLine("3 Skriv ut den totala ålderna på alla passagerare"); Console.WriteLine("4 Avsluta programmet"); meny = int.Parse(Console.ReadLine()); //läser in användarens svar switch (meny) { case 1: Add_passenger(); break; case 2: Print_buss(); break; case 3: Calc_total_age(); break; case 4: Avsluta(); break; } } while (meny != 4); //do while loop avslutas när användaren väljer alternativ 4, att avsluta programmet } public void Add_passenger() //metod för att lägga till passagerare { int antal_passagerare = 0; for (int i = antal_passagerare; i < antal_passagerare; i++) //skapar en for loop. om i är mindre än max antal passagerare så adderas index med 1. { if (antal_passagerare > passagerare.Length) //eftersom vektorn passagerare räknar 0-24 och antal_passagerare som är int börjar på 1. { Console.WriteLine("Bussen är full, det går inte att lägga till några fler passagerare."); } else { Console.WriteLine("Du har valt att lägga till en passagerare, vänligen ange passagerarens ålder: "); passagerare[i] = int.Parse(Console.ReadLine()); } } } public void Print_buss() { Console.WriteLine("Alla passagerarnas åldrar är: " + passagerare); //print(passagerare) ? } public void Calc_total_age() { int summa = 0; for (int i = 0; i < passagerare.Length; i++) //inte säker att detta är rätt { summa += passagerare[i]; } Console.WriteLine("Den sammanlagda åldern på alla passagerare är " + summa); } public void Avsluta() { Console.WriteLine("Programmet avslutas."); } } }

Permalänk
Medlem
Skrivet av Hubbiedub:

Jag har flyttat om dom olika delarna som det sista exemplet du skrev, samt flyttat int antal_passagerare = 0; ner till add_passenger metoden.

Då är antal_passagerare en lokal variabel i Add_passenger, så du kan inte använda den i resten av programmet utan kommer glömma bort hur många passagerare du lade till så fort du når slutet av Add_passenger. Du bör med andra ord inte flytta variabeln utan den ska deklareras där du hade den först.

Varför C# inte hittar din Main-metod har jag däremot ingen aning om, någon annan kanske har bättre koll på det. En möjlig lösning är att bara skapa ett nytt projekt, som borde ha en fungerande Main-metod från början, och sen klistra in din Buss-klass i den.

Permalänk
Skrivet av perost:

Då är antal_passagerare en lokal variabel i Add_passenger, så du kan inte använda den i resten av programmet utan kommer glömma bort hur många passagerare du lade till så fort du når slutet av Add_passenger. Du bör med andra ord inte flytta variabeln utan den ska deklareras där du hade den först.

Varför C# inte hittar din Main-metod har jag däremot ingen aning om, någon annan kanske har bättre koll på det. En möjlig lösning är att bara skapa ett nytt projekt, som borde ha en fungerande Main-metod från början, och sen klistra in din Buss-klass i den.

Okej! Jag la tillbaka add_passenger till klassen buss och det verkar fungera. Och jag kopierade koden som du föreslog till ett nytt projekt och det funkade! Jag måste ha strulat till allt när jag i början tog bort Main metoden.
Jag har nu inga error eller varningar i visual studios men nu har jag problemet att min meny inte verkar fungera. När jag kör programmet får jag upp menyn men när jag skriver in ett val händer det ingenting. Det enda alternativet som funkar är det sista att avsluta programmet. Men inte alternativ 1-3. :/

Permalänk
Medlem
Skrivet av Hubbiedub:

Okej! Jag la tillbaka add_passenger till klassen buss och det verkar fungera. Och jag kopierade koden som du föreslog till ett nytt projekt och det funkade! Jag måste ha strulat till allt när jag i början tog bort Main metoden.
Jag har nu inga error eller varningar i visual studios men nu har jag problemet att min meny inte verkar fungera. När jag kör programmet får jag upp menyn men när jag skriver in ett val händer det ingenting. Det enda alternativet som funkar är det sista att avsluta programmet. Men inte alternativ 1-3. :/

Ingenting är väl inte riktigt sant? Både alternativ 2 och alternativ 3 gör så att det händer något.

På alternativ 1 händer däremot ingenting som du kan se. Mitt tips blir att se över villkoret för din loop som ska lägga till nya passagerare till bussen. Det står inte riktigt rätt till där.

Permalänk

Du har nog redan fått hjälp med kodproblemet, så tänkte bara belysa en liten detalj.

Använd inte snake_case när du namnger saker i C#, använd camelCase eller PascalCase. Alltså:

public int antal_passagerare; // Nej public int AntalPassagerare; // Ja public void Add_passenger() // Nej public void AddPassenger() // Ja

Kanske inte det viktigaste att fokusera på just nu, men kan vara värt att skriva rätt från början: https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/c...

Permalänk
Skrivet av MickeBoy:

Ingenting är väl inte riktigt sant? Både alternativ 2 och alternativ 3 gör så att det händer något.

På alternativ 1 händer däremot ingenting som du kan se. Mitt tips blir att se över villkoret för din loop som ska lägga till nya passagerare till bussen. Det står inte riktigt rätt till där.

Hej, tack ursäkta mitt sena svar!! Förstår inte vad du menar med att ingenting är sant? Det jag menar är att när jag får upp menyn och skriver in något av alternativen 1-3 så skrivs bara menyn ut igen, om jag inte väljer att avsluta. Vad som är fel har jag absolut ingen aning om och vill helst inte skriva till läraren för det tar normalt minst 4 dagar att få ett svar.. Har gått igenom exempel i boken och studieguiden som har med switch case och vektorer att göra men inget är ju som den här uppgiften, så det är svårt att förstå vad som skulle kunna funka i mitt fall. :/

Permalänk
Skrivet av Oh Geesus:

Du har nog redan fått hjälp med kodproblemet, så tänkte bara belysa en liten detalj.

Använd inte snake_case när du namnger saker i C#, använd camelCase eller PascalCase. Alltså:

public int antal_passagerare; // Nej public int AntalPassagerare; // Ja public void Add_passenger() // Nej public void AddPassenger() // Ja

Kanske inte det viktigaste att fokusera på just nu, men kan vara värt att skriva rätt från början: https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/c...

Hej, tack! Jag har försökt att ändrat till små bokstäver men visual studios säger att dom måste börja med upper case characters. Jag använder just dom namnen på sakerna eftersom det står så i kodskalet från läraren. :/

Permalänk
Medlem
Skrivet av Hubbiedub:

Hej, tack ursäkta mitt sena svar!! Förstår inte vad du menar med att ingenting är sant? Det jag menar är att när jag får upp menyn och skriver in något av alternativen 1-3 så skrivs bara menyn ut igen, om jag inte väljer att avsluta. Vad som är fel har jag absolut ingen aning om och vill helst inte skriva till läraren för det tar normalt minst 4 dagar att få ett svar.. Har gått igenom exempel i boken och studieguiden som har med switch case och vektorer att göra men inget är ju som den här uppgiften, så det är svårt att förstå vad som skulle kunna funka i mitt fall. :/

Hej!

När jag testkör ditt program så får jag följande:

Välkommen till bussen! Vänligen välj i menyn vad du vill göra. 1 Lägg till passagerare 2 Skriv ut alla passagerares ålder 3 Skriv ut den totala ålderna på alla passagerare 4 Avsluta programmet 2 Alla passagerarnas åldrar är: System.Int32[] 1 Lägg till passagerare 2 Skriv ut alla passagerares ålder 3 Skriv ut den totala ålderna på alla passagerare 4 Avsluta programmet 3 Den sammanlagda åldern på alla passagerare är 0 1 Lägg till passagerare 2 Skriv ut alla passagerares ålder 3 Skriv ut den totala ålderna på alla passagerare 4 Avsluta programmet 1 1 Lägg till passagerare 2 Skriv ut alla passagerares ålder 3 Skriv ut den totala ålderna på alla passagerare 4 Avsluta programmet

Det fetstilta är det som programmet ger som output. Jag försöker att säga till dig att ditt program faktiskt gör någonting, men inte det som du tänkt dig och du behöver ta reda på vad som händer och varför.

Titta på din for-loop

int antal_passagerare = 0; for (int i = antal_passagerare; i < antal_passagerare; i++) //skapar en for loop. om i är mindre än max antal passagerare så adderas index med 1. {

När antal_passagerare = 0 så står det egentligen:

for (int i = 0; i < 0; i++) //skapar en for loop. om i är mindre än max antal passagerare så adderas index med 1. {

D.v.s. variabeln i börjar från 0 och så länge som den är mindre än 0 så ska loopen utföras. => inget jobb görs i den loopen.

Permalänk
Skrivet av MickeBoy:

Hej!

När jag testkör ditt program så får jag följande:

Välkommen till bussen! Vänligen välj i menyn vad du vill göra. 1 Lägg till passagerare 2 Skriv ut alla passagerares ålder 3 Skriv ut den totala ålderna på alla passagerare 4 Avsluta programmet 2 Alla passagerarnas åldrar är: System.Int32[] 1 Lägg till passagerare 2 Skriv ut alla passagerares ålder 3 Skriv ut den totala ålderna på alla passagerare 4 Avsluta programmet 3 Den sammanlagda åldern på alla passagerare är 0 1 Lägg till passagerare 2 Skriv ut alla passagerares ålder 3 Skriv ut den totala ålderna på alla passagerare 4 Avsluta programmet 1 1 Lägg till passagerare 2 Skriv ut alla passagerares ålder 3 Skriv ut den totala ålderna på alla passagerare 4 Avsluta programmet

Det fetstilta är det som programmet ger som output. Jag försöker att säga till dig att ditt program faktiskt gör någonting, men inte det som du tänkt dig och du behöver ta reda på vad som händer och varför.

Titta på din for-loop

int antal_passagerare = 0; for (int i = antal_passagerare; i < antal_passagerare; i++) //skapar en for loop. om i är mindre än max antal passagerare så adderas index med 1. {

När antal_passagerare = 0 så står det egentligen:

for (int i = 0; i < 0; i++) //skapar en for loop. om i är mindre än max antal passagerare så adderas index med 1. {

D.v.s. variabeln i börjar från 0 och så länge som den är mindre än 0 så ska loopen utföras. => inget jobb görs i den loopen.

Hej! Förlåt för så sent var igen, jag har varit borta. Efter att ha läst ditt inlägg några gånger fattade jag till slut vad du menar. Jag har fått ordning på i stort sett allt i min kod för att klara E nivå. TUSEN TACK alltså!
Jag har bara en liten sak kvar och det är min metod som skriver ut alla passagerares åldrar. Den ser nu ut såhär. Den fungerar, meeen när den skriver ut svaren börjar den på noll vilket makes sense eftersom vektorn börjar på noll. Men när man räknar passagerare börjar man ju räkna på 1. Går det att använda klammerparanteser som jag har gjort men att den skriver ex "passagerare 1 på bussen är X år gammal" istället för 0 när den börjar? Eller finns det något bättre sätt att skriva ut svaret?

public void Print_buss() { for (int i = 0; i < passagerare.Length; i++) //skapar for loop för att skriva ut alla passagerare samt deras åldrar. { if (passagerare[i] == 0) //gör så att loopen avslutas tidigare om inte hela bussen är fylld. { break; } Console.WriteLine("Passagerare {0} på bussen är {1} år gammal.", i, passagerare[i]); } }

Permalänk
Medlem

@Hubbiedub: Du kan använda i + 1 i utskriften. Utskrifts-funktionen är för övrigt onödigt krånglig, istället för att loopa igenom hela arrayen och sluta om du hittar en tom plats så är det bättre att bara loopa igenom så många platser som du fyllt (som du förhoppningsvis hållit koll på med antal_passagerare).

Permalänk
Skrivet av perost:

@Hubbiedub: Du kan använda i + 1 i utskriften. Utskrifts-funktionen är för övrigt onödigt krånglig, istället för att loopa igenom hela arrayen och sluta om du hittar en tom plats så är det bättre att bara loopa igenom så många platser som du fyllt (som du förhoppningsvis hållit koll på med antal_passagerare).

Så smart! Stort tack! Jag har fått ordning på allting nu så det åtminstone fungerar, även om det kanske inte är den smidigaste koden