Permalänk
Medlem

Varför fungerar inte min kod?

case 2: Console.WriteLine("\tVänligen ange titel du vill söka efter: "); string keyWord = Console.ReadLine(); for (int i = 0; i < myBlog.Count; i++) { if (post[0].ToLower() == keyWord.ToLower()) { Console.WriteLine("\tTitel: " + post[0] + "\n\tInnehåll: " + post[1] + "\n\tSkriven den: " + post[2] + ("\n")); } else { Console.WriteLine("\tDin sökning matchar ingen titel, försök igen!"); } Console.ReadLine(); Console.Clear(); } break;

Rubrik förtydligad typ, kan inte koda :( /Vzano, Mod
Permalänk
Medlem

Hela koden - om nödvändigt

using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Bloggen { internal class Program { static void Main(string[] args) { bool myBool = true; List<string[]> myBlog = new List<string[]>(); while (myBool) { string[] post = new string[3]; post[0] = "Titel"; post[1] = "Innehåll"; post[2] = "Datum + tid"; Console.WriteLine("\t\n Välkommen till din blogg"); Console.WriteLine("\tHuvudmeny"); Console.WriteLine("\n [1] - Skapa inlägg"); Console.WriteLine(" [2] - Sök bland inlägg"); Console.WriteLine(" [3] - Visa alla inlägg"); Console.WriteLine(" [4] - Avsluta"); int input = 0; int.TryParse(Console.ReadLine(), out input); if (input > 4) { Console.WriteLine("\tVänligen mata in en siffra mellan 1-4!"); } switch (input) { case 1: Console.WriteLine("\tVälj titel: "); post[0] = Console.ReadLine(); Console.WriteLine("\tSkriv ditt blogginlägg: "); post[1] = Console.ReadLine(); post[2] = DateTime.Now.ToString(); myBlog.Add(post); Console.Write("\tDitt inlägg har sparats! Tryck på enter för att komma tillbaka till menyn!"); Console.ReadLine(); Console.Clear(); break; case 2: Console.WriteLine("\tVänligen ange titel du vill söka efter: "); string keyWord = Console.ReadLine(); for (int i = 0; i < myBlog.Count; i++) { if (post[0].ToLower() == keyWord.ToLower()) { Console.WriteLine("\tTitel: " + post[0] + "\n\tInnehåll: " + post[1] + "\n\tSkriven den: " + post[2] + ("\n")); } else { Console.WriteLine("\tDin sökning matchar ingen titel, försök igen!"); } Console.ReadLine(); Console.Clear(); } break; case 3: foreach (string[] savedPost in myBlog) Console.WriteLine("\tTitel: " + savedPost[0] + "\n\tInnehåll: " + savedPost[1] + " \n\tSkrivet den: " + savedPost[2] + "\n"); Console.WriteLine("\tTryck på enter för att komma tillbaka till menyn!"); Console.ReadLine(); Console.Clear(); break; case 4: Console.Clear(); Console.WriteLine("\tBloggen avslutas..."); Console.ReadKey(); myBool = false; break; default: Console.WriteLine("\tFelaktig inmatning, vänligen mata in en siffra mellan 1-4 för att navigera menyn."); break; } } } } }

Permalänk
Medlem

Sjukt svårt att säga varför det inte fungerar när du varken säger vad som förväntas hända eller vad som händer när koden körs. Men jag får en känsla av att du vill iterera över myBlog[] och det gör du inte.

Permalänk
Medlem

Ah sorry, jag vill alltså att användaren kan skriva in ett ord och få upp ett sparat inlägg om ordet matchar en titel som finns sparat i bloggen

Vad menar du med iterera över myBlog*[] (*redigerade här, hade nog läst för snabbt och sett fel c: )

//mvh noob på det här - sorry c:

Oops - tillägg! Vad som händer är att koden går in i else satsen även om jag skriver exakt samma ord i sökningen som jag gjort i titeln, med samma versaler/ickeversaler o.s.v

Permalänk
Medlem

Sorry, ändrade i inlägget till myBlog[]. Ska du inte kolla innehållet i den? Nu kör du bara en loop där du gång på gång kollar om keyWord.ToLower() == "titel". Om jag inte läser fel...

Permalänk
Medlem

Hm, jag antar det(?). myBlog är alltså listan med string vektorer - post[0] ska vara varje inläggs titel om jag fått till koden som jag menat men jag har gjort något galet då helt enkelt?

Jag har dessutom testat både post[0].ToLower och post[i].ToLower men varken av dem funkar, lägger jag in MyBlog där sparkar visual studio bakut och jag får följande felmeddelande:

'string[]' does not contain a definition for 'ToLower' and no accessible extension method 'ToLower' accepting a first argument of type 'string[]' could be found (are you missing a using directive or an assembly reference?)

Återigen missat lite :P
Permalänk
Medlem

Ja du gör något galet och eftersom det är en uppenbar skoluppgift vill jag inte hjälpa dig mer än så här. Jag kan säga att jag inte blir särskilt förvånad över att det inte finns någon ToLower för elementen du plockar ut ur myBlog. Det är också precis vad som står i ditt felmeddelande. Du får fundera lite över vilken lista du behöver iterera över och vad det är som listorna innehåller. Kör lite debugging där du ser vad som finns i variablerna så kommer det nog att klarna ganska fort.

EDIT: Att bara säga att du gör något galet är förresten lite hårt. Så himla galet är det inte och när du har klurat ut vad som ska göras är det bara någon enstaka rad i koden som behöver ändras.

Permalänk
Hedersmedlem

Mitt förslag är att du sätter en break point på if-satsen som inte fungerar och kollar vad du har för värden du jämför.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem
Skrivet av MrPasty:

…eftersom det är en uppenbar skoluppgift vill jag inte hjälpa dig mer än så här.

Lysande! Vill absolut inte ha lösningen utan bara förstå vad det är jag inte förstår - men tror jag har tillräckligt nu för att klura ut det iaf! Tack båda två för hjälpen

Permalänk
Medlem
Skrivet av Lysdexic:

Lysande! Vill absolut inte ha lösningen utan bara förstå vad det är jag inte förstår - men tror jag har tillräckligt nu för att klura ut det iaf! Tack båda två för hjälpen

Lycka till, det kommer att gå jättebra! Det är som sagt väldigt små saker som behöver justeras.

Permalänk
Medlem

Òm vi kollar på case 2, kan du kommentera vad som händer i varje rad?

Permalänk
Medlem

*** Blev indraget en massa och känns svårt att läsa kommentarer när de inte har annan färg, länkar därför till en screenshot med om det känns lättare att läsa! https://prnt.sc/Wtd9ukWcA4Qb ***

Edit 2: Ser att tryckfelsnisse varit framme, for-loop för integern i - inte 1 ^^

case 2: //skriver ut instruktion till användaren Console.WriteLine("\tVänligen ange titel du vill söka efter: "); //initierar en string döpt till 'keyWord' som tilldelas vad användaren matar in string keyWord = Console.ReadLine(); //for loop för 1 som går igenom varje sparad logg så länge i är mindre än antalet bloggposter for (int i = 0; i < myBlog.Count; i++) { /*Här hoppades jag då att koden för varje for-loop skulle kolla om post[0] (tidigare i programmet tilldelat till titeln) stämde överens med sökordet 'keyWord' och valde att använda ToLower på båda för att inte programmet ska missa något bara för att det är fel typ av samma bokstav (versal eller ej) */ if (post[0].ToLower() == keyWord.ToLower()) { //Om sökord och titel stämmer överent matas följande text ut med respektive titel, innehåll och datum/tid stämpel Console.WriteLine("\tTitel: " + post[0] + "\n\tInnehåll: " + post[1] + "\n\tSkriven den: " + post[2] + ("\n")); } else { //Annars skrivs detta ut Console.WriteLine("\tDin sökning matchar ingen titel, försök igen!"); } //för läsbarhet i konsollfönstret Console.ReadLine(); //för att hålla konsollfönstret städat så det blir lättare att navigera programmet för användaren Console.Clear(); } break;

Permalänk
Medlem

Ett problem du har är att du har deklarerat post för långt ut, den variabeln borde deklareras inne i case 1 istället för i början av while-loopen. Det är inte direkt fel, men verkar göra dig förvirrad över vad post faktiskt är. post är ju bara en temporär variabel som återskapas varje gång loopen börjar om från början.

Här är lite förenklat vad din kod gör just nu (ursäkta om det är lite komplicerat, men nybörjare verkar ofta ha problem med just detta):

while (myBool) { // Skapar en ny variabel post som pekar på en array med tre element. string[] post = new string[3]; // Fyller arrayen som post pekar på med textsträngar (varför?). post[0] = "Titel"; post[1] = "Innehåll"; post[2] = "Datum + tid"; switch (input) { case 1: // Skriver över datan i arrayen som post pekar på med vad användaren matar in. post[0] = Console.ReadLine(); post[1] = Console.ReadLine(); post[2] = DateTime.Now.ToString(); // Sparar en referens till arrayen som post pekar på i myBlog. myBlog.Add(post); break; case 2: // Här innehåller post alltid strängarna som lades in i början av while-loopen, // eftersom en ny array skapas varje gång while-loopen börjar om. break; } // Här slutar variablen post existera, men arrayen den pekade på lever kvar så // länge som något annat (som myBlog) har en referens till den. }

Så TLDR: använd myBlog istället för post i case 2, och flytta in post i case 1 så att du inte kan använda den i andra case av misstag. Och eftersom myBlog är en lista med arrayer så måste du indexera den två gånger för att komma titlarna, d.v.s. myBlog[0] ger dig det första inlägget medan myBlog[0][0] ger dig titeln på det första inlägget.