Permalänk

Meny och metoder

Hej jag håller på att plugga programering 1 och fastnade på en uppgift. Jag vet inte ens om det är möjlight men kan man koppla metoder på något sätt? Problemet är att allt i "case 1" man skriver typ syns inte i "case 2".

DateTime datum = DateTime.Now; List<string> bloggList = new List<string>(); bool myBool = true; int menyVal = 0; while (myBool) { bloggMenu(); int.TryParse(Console.ReadLine(), out menyVal); switch (menyVal) { case 1: SkrivInlägg(); break; case 2: SökInlägg(); break; static void bloggMenu() { Console.Clear(); Console.WriteLine("\n\t#############################\n\t Välkommen till Bloggen\n\t#############################"); Console.WriteLine("\n\t [1] Skriv ett nytt blogginlägg"); Console.WriteLine("\n\t [2] Sök efter blogginlägg"); Console.WriteLine("\n\t [3] Skriv ut alla sparade blogginlägg"); Console.WriteLine("\n\t [4] Rensa bloggens ineehåll"); Console.WriteLine("\n\t [5] Avlusta"); Console.Write("\nSkriv en siffra 1-5: "); } static void SkrivInlägg() { DateTime datum = DateTime.Now; Console.Clear(); string[] bloggInfo = new string[3]; Console.WriteLine("Skriv in bloggtitel"); bloggInfo[0] = Console.ReadLine(); Console.WriteLine("Skriv in bloggtext"); bloggInfo[1] = Console.ReadLine(); bloggInfo[2] = "Datum & klockslag " + (datum = DateTime.Now); static void SökInlägg() { List<string> bloggList = new List<string>(); Console.WriteLine("Skriv in bloggtitel du söker"); string sökord = Console.ReadLine(); bool knapp = false; for (int i = 0; i < bloggList.Count; i++ ) { if (sökord.ToUpper() == bloggList[i][0].ToString().ToUpper()) { knapp = true; Console.WriteLine("Blogginlägget hittades! " + "Bloggtitel: " + bloggList[i][0] + "Bloggtext: " + bloggList[i][1] + " !"); Console.ReadLine(); } } if (knapp == false) { Console.WriteLine("Sökordet hittades inte !"); Console.ReadLine();

Permalänk
Medlem

Börja med att editera inlägget o lägg koden inom [code] taggar.

Visa signatur

ASUS X570-F, AMD Ryzen 9 3900x, 16Gb RAM, Gigabyte 2070Super auros

Permalänk
Medlem
Skrivet av atombari22:

Hej jag håller på att plugga programering 1 och fastnade på en uppgift. Jag vet inte ens om det är möjlight men kan man koppla metoder på något sätt? Problemet är att allt i "case 1" man skriver typ syns inte i "case 2".

DateTime datum = DateTime.Now; List<string> bloggList = new List<string>(); bool myBool = true; int menyVal = 0; while (myBool) { bloggMenu(); int.TryParse(Console.ReadLine(), out menyVal); switch (menyVal) { case 1: SkrivInlägg(); break; case 2: SökInlägg(); break; static void bloggMenu() { Console.Clear(); Console.WriteLine("\n\t#############################\n\t Välkommen till Bloggen\n\t#############################"); Console.WriteLine("\n\t [1] Skriv ett nytt blogginlägg"); Console.WriteLine("\n\t [2] Sök efter blogginlägg"); Console.WriteLine("\n\t [3] Skriv ut alla sparade blogginlägg"); Console.WriteLine("\n\t [4] Rensa bloggens ineehåll"); Console.WriteLine("\n\t [5] Avlusta"); Console.Write("\nSkriv en siffra 1-5: "); } static void SkrivInlägg() { DateTime datum = DateTime.Now; Console.Clear(); string[] bloggInfo = new string[3]; Console.WriteLine("Skriv in bloggtitel"); bloggInfo[0] = Console.ReadLine(); Console.WriteLine("Skriv in bloggtext"); bloggInfo[1] = Console.ReadLine(); bloggInfo[2] = "Datum & klockslag " + (datum = DateTime.Now); static void SökInlägg() { List<string> bloggList = new List<string>(); Console.WriteLine("Skriv in bloggtitel du söker"); string sökord = Console.ReadLine(); bool knapp = false; for (int i = 0; i < bloggList.Count; i++ ) { if (sökord.ToUpper() == bloggList[i][0].ToString().ToUpper()) { knapp = true; Console.WriteLine("Blogginlägget hittades! " + "Bloggtitel: " + bloggList[i][0] + "Bloggtext: " + bloggList[i][1] + " !"); Console.ReadLine(); } } if (knapp == false) { Console.WriteLine("Sökordet hittades inte !"); Console.ReadLine();

Du vill inte "koppla metoder". Du vill deklarera dina variabler utanför dina metoder.
Allt inom måsvingarna { } är isolerat och kan inte nås utifrån - ett så kallat scope inom programmeringsvärlden.

Du deklarerar din List<string> bloggList innuti metoden Main()(antar det är Main eftersom du valt att klippa bort översta delen av din kod ) vilket gör att listan endast lever medan du fortfarande är i Main-metodens scope. Så fort du går utanför, t.ex. via SökInlägg, så kommer du inte längre nå Main-metodens bloggList. Detta upptäckte du förmodligen när C# skrek åt dig att det inte finns någon variabel bloggList i din SökInlägg-metod? vilket är varför du då skapade en NY bloggList-lista - helt tom på element eftersom denna lista inte har något att göra med den lista du skapade under Main.

För att lösa ett av dina problem, deklarerar du helt enkelt din bloggList ovanför Main-metoden i ett så kallat class scope (se länken om scopes).

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk

Efter jag har deklarerat bloggList övanför då får sånt fel.
Error CS0120 An object reference is required for the non-static field, method, or property

class Program { List<string> bloggList = new List<string>(); DateTime datum = DateTime.Now; static void Main(string[] args) {

Permalänk
Medlem
Skrivet av atombari22:

Efter jag har deklarerat bloggList övanför då får sånt fel.
Error CS0120 An object reference is required for the non-static field, method, or property

class Program { List<string> bloggList = new List<string>(); DateTime datum = DateTime.Now; static void Main(string[] args) {

Du försöker anropa icke-statiska variabler från en statisk metod. Prova detta så kan du gå vidare

class Program { static List<string> bloggList = new List<string>(); static DateTime datum = DateTime.Now; static void Main(string[] args) {

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk

Toppen! alla fel försvann men.... fortforande allt jag skriver i "case1" titel osv. Hittas inte i "case 2" samt "case 3". Vad är det som jag missar? Jag klistar in hela koden.

class Program { static List<string> bloggList = new List<string>(); static DateTime datum = DateTime.Now; static void Main(string[] args) { //Använder boll för att ta kontroll över loopen. bool myBool = true; //Används för inmatning för att komma fram till olika menyval. int menyVal = 0; while (myBool) { //Metod som vi skrev längs ner vilken ska printa ut en meny tack för det koden är lite mer läsbar. bloggMenu(); //TryParse används för att förhindra körtidsfel. Användaren ska bara knappa in siffror mellan 1-5. int.TryParse(Console.ReadLine(), out menyVal); //Meny baserad switch-sats vilken är bäst lämad för menyer. switch (menyVal) { //Case 1 innehåller koden för menyval 1. Här ska användaren skriva bloggtitel samt bloggtext vilken är sedan sparat i en vektorlista. case 1: SkrivInlägg(); break; //Case 2 innehåller linjärsökalgoritm vilken tillåtter användaren söka genom vektorlistan efter bloggtitel. case 2: SökInlägg(); break; //Case 3 allt från bloggList skrivs ut. case 3: SkrivUtinlägg(); break; //Case 4 rensar bloggList innehållet. case 4: bloggList.Clear(); Console.Clear(); Console.WriteLine("\nBloggens innehål är nu rensat"); break; //Case 5 programmet avslutas. myBool blir false alltså vilkor för loopen tar slut. case 5: Console.WriteLine("Programmet avslutas!!"); myBool = false; break; //Menyval utanför 1-5 hänvisas till default där felmdeddelandet presenteras default: Console.WriteLine("\nFelmeddelande! Välj mellan 1-5 som menyval !"); break; } Console.WriteLine("\nTryck ENTER för att gå tillbaka till meny"); Console.ReadLine(); } } //Skapar en metod som skapar meny. Användes void bara för att metoden gör sin funktion. Syftet är att göra koden lite renare. static void bloggMenu() { Console.Clear(); Console.WriteLine("\n\t#############################\n\t Välkommen till Bloggen\n\t#############################"); Console.WriteLine("\n\t [1] Skriv ett nytt blogginlägg"); Console.WriteLine("\n\t [2] Sök efter blogginlägg"); Console.WriteLine("\n\t [3] Skriv ut alla sparade blogginlägg"); Console.WriteLine("\n\t [4] Rensa bloggens innehåll"); Console.WriteLine("\n\t [5] Avlusta"); Console.WriteLine("\n\t#############################"); Console.Write("\nSkriv en siffra 1-5: "); } //Skapar metod för case till switch-satsen static void SkrivInlägg() { //Används för att lagra dagens tid och datum för blogginlägg. Console.Clear(); string[] bloggInfo = new string[3]; Console.WriteLine("Skriv in bloggtitel"); bloggInfo[0] = Console.ReadLine(); Console.WriteLine("Skriv in bloggtext"); bloggInfo[1] = Console.ReadLine(); //Lägger till datumet och tidpunkt för inlägget. bloggInfo[2] = "Datum & klockslag " + (datum = DateTime.Now); } static void SökInlägg() { //Skapar stringvektorlista för att spara textsträngar. Console.WriteLine("Skriv in bloggtitel du söker"); string sökord = Console.ReadLine(); bool knapp = false; for (int i = 0; i < bloggList.Count; i++ ) { if (sökord.ToUpper() == bloggList[i][0].ToString().ToUpper()) { knapp = true; Console.WriteLine("Blogginlägget hittades! " + "Bloggtitel: " + bloggList[i][0] + "Bloggtext: " + bloggList[i][1] + " !"); Console.ReadLine(); } } if (knapp == false) { Console.WriteLine("Sökordet hittades inte !"); Console.ReadLine(); } } static void SkrivUtinlägg() { for (int i = 0; bloggList.Count > i; i++) { Console.WriteLine(bloggList[i][2]); Console.WriteLine("Blogginlägg " + (i + 1)); Console.WriteLine("\nBloggtitel " + bloggList[i][0]); Console.WriteLine("\nBlogtext " + bloggList[i][1]); Console.ReadLine(); } } } }

Permalänk
Medlem
Skrivet av atombari22:

Toppen! alla fel försvann men.... fortforande allt jag skriver i "case1" titel osv. Hittas inte i "case 2" samt "case 3". Vad är det som jag missar? Jag klistar in hela koden.

class Program { static List<string> bloggList = new List<string>(); static DateTime datum = DateTime.Now; static void Main(string[] args) { //Använder boll för att ta kontroll över loopen. bool myBool = true; //Används för inmatning för att komma fram till olika menyval. int menyVal = 0; while (myBool) { //Metod som vi skrev längs ner vilken ska printa ut en meny tack för det koden är lite mer läsbar. bloggMenu(); //TryParse används för att förhindra körtidsfel. Användaren ska bara knappa in siffror mellan 1-5. int.TryParse(Console.ReadLine(), out menyVal); //Meny baserad switch-sats vilken är bäst lämad för menyer. switch (menyVal) { //Case 1 innehåller koden för menyval 1. Här ska användaren skriva bloggtitel samt bloggtext vilken är sedan sparat i en vektorlista. case 1: SkrivInlägg(); break; //Case 2 innehåller linjärsökalgoritm vilken tillåtter användaren söka genom vektorlistan efter bloggtitel. case 2: SökInlägg(); break; //Case 3 allt från bloggList skrivs ut. case 3: SkrivUtinlägg(); break; //Case 4 rensar bloggList innehållet. case 4: bloggList.Clear(); Console.Clear(); Console.WriteLine("\nBloggens innehål är nu rensat"); break; //Case 5 programmet avslutas. myBool blir false alltså vilkor för loopen tar slut. case 5: Console.WriteLine("Programmet avslutas!!"); myBool = false; break; //Menyval utanför 1-5 hänvisas till default där felmdeddelandet presenteras default: Console.WriteLine("\nFelmeddelande! Välj mellan 1-5 som menyval !"); break; } Console.WriteLine("\nTryck ENTER för att gå tillbaka till meny"); Console.ReadLine(); } } //Skapar en metod som skapar meny. Användes void bara för att metoden gör sin funktion. Syftet är att göra koden lite renare. static void bloggMenu() { Console.Clear(); Console.WriteLine("\n\t#############################\n\t Välkommen till Bloggen\n\t#############################"); Console.WriteLine("\n\t [1] Skriv ett nytt blogginlägg"); Console.WriteLine("\n\t [2] Sök efter blogginlägg"); Console.WriteLine("\n\t [3] Skriv ut alla sparade blogginlägg"); Console.WriteLine("\n\t [4] Rensa bloggens innehåll"); Console.WriteLine("\n\t [5] Avlusta"); Console.WriteLine("\n\t#############################"); Console.Write("\nSkriv en siffra 1-5: "); } //Skapar metod för case till switch-satsen static void SkrivInlägg() { //Används för att lagra dagens tid och datum för blogginlägg. Console.Clear(); string[] bloggInfo = new string[3]; Console.WriteLine("Skriv in bloggtitel"); bloggInfo[0] = Console.ReadLine(); Console.WriteLine("Skriv in bloggtext"); bloggInfo[1] = Console.ReadLine(); //Lägger till datumet och tidpunkt för inlägget. bloggInfo[2] = "Datum & klockslag " + (datum = DateTime.Now); } static void SökInlägg() { //Skapar stringvektorlista för att spara textsträngar. Console.WriteLine("Skriv in bloggtitel du söker"); string sökord = Console.ReadLine(); bool knapp = false; for (int i = 0; i < bloggList.Count; i++ ) { if (sökord.ToUpper() == bloggList[i][0].ToString().ToUpper()) { knapp = true; Console.WriteLine("Blogginlägget hittades! " + "Bloggtitel: " + bloggList[i][0] + "Bloggtext: " + bloggList[i][1] + " !"); Console.ReadLine(); } } if (knapp == false) { Console.WriteLine("Sökordet hittades inte !"); Console.ReadLine(); } } static void SkrivUtinlägg() { for (int i = 0; bloggList.Count > i; i++) { Console.WriteLine(bloggList[i][2]); Console.WriteLine("Blogginlägg " + (i + 1)); Console.WriteLine("\nBloggtitel " + bloggList[i][0]); Console.WriteLine("\nBlogtext " + bloggList[i][1]); Console.ReadLine(); } } } }

Du lägger aldrig in det du skriver i SkrivInlägg() i din bloggList lista
Ett tips är även att du ser över datatypen för din bloggList och vad du skapar under SkrivInlägg().

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk

Jag tror att

bloggList.Add(bloggInfo);

var det som saknades men bloggInfo får fel meddelande.

Error CS1503 Argument 1: cannot convert from 'string[]' to 'string'

static void SkrivInlägg() { //Används för att lagra dagens tid och datum för blogginlägg. string[] bloggInfo = new string[3]; Console.WriteLine("Skriv in bloggtitel"); bloggInfo[0] = Console.ReadLine(); Console.WriteLine("Skriv in bloggtext"); bloggInfo[1] = Console.ReadLine(); //Lägger till datumet och tidpunkt för inlägget. bloggInfo[2] = "Datum & klockslag " + (datum = DateTime.Now); //Lägger till min vektor med dess element i stringvektorlistan. bloggList.Add(bloggInfo); Console.WriteLine("Ett nytt Blogginlägg är nu sparat! :D"); }

Permalänk
Medlem
Skrivet av atombari22:

Jag tror att

bloggList.Add(bloggInfo);

var det som saknades men bloggInfo får fel meddelande.

Error CS1503 Argument 1: cannot convert from 'string[]' to 'string'

static void SkrivInlägg() { //Används för att lagra dagens tid och datum för blogginlägg. string[] bloggInfo = new string[3]; Console.WriteLine("Skriv in bloggtitel"); bloggInfo[0] = Console.ReadLine(); Console.WriteLine("Skriv in bloggtext"); bloggInfo[1] = Console.ReadLine(); //Lägger till datumet och tidpunkt för inlägget. bloggInfo[2] = "Datum & klockslag " + (datum = DateTime.Now); //Lägger till min vektor med dess element i stringvektorlistan. bloggList.Add(bloggInfo); Console.WriteLine("Ett nytt Blogginlägg är nu sparat! :D"); }

Precis
Din kommentar längst ner skriver "stringvektorlista", där vektor är synonymt med ordet Array som används inom programmeringsvärlden.
En string-array/string-vektor är följande: string[], men du har skapat en lista av typen string istället för string[].

Gör om din bloggList till att vara av typen List<string[]> istället. Då är varje element i din lista av typen string-vektor

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk

Tack så mycket för hjälpen allt fungerar som det ska <3