Permalänk
Medlem

Bloggen c# felhantering vektorer

Har skapat ett program som bra fungerar så länge inte användaren skriver in fler strängar än vad vektorn kan hålla. Strängvektorn håller 6 strängar, låt säga att användaren skriver in 7 och sedan försöker söka på det sjunde inlägget, då kraschar programmet. Hur felhanterar jag detta lättast?

namespace Inlämning_bloggen_realdeal
{
internal class Program
{
static void Main(string[] args)
{
Console.ForegroundColor = ConsoleColor.DarkCyan;
List<string[]> Bloggen = new List<string[]>();
bool minBool = true;
while (minBool)
{
användarMeny(); //Kallar på menymetoden

int meny;
int.TryParse(Console.ReadLine(), out meny);
string[] inlägg = new string[5]; //Strängvektor som håller 5 strängar
switch (meny)
{
case 1:
Console.Write("\tSkriv in titel: ");
inlägg[0] = Console.ReadLine(); //Sparar titel på blogginlägg

Console.Write("\tSkriv ditt inlägg: ");
inlägg[1] = Console.ReadLine(); //Sparar inlägget
inlägg[2] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //Sparar datum och tid när inlägget blev publicerat

Bloggen.Add(inlägg); //Lägger till inläggen i listan Bloggen
Console.WriteLine("\tDitt blogginlägg är sparat!");

Console.ReadLine();
Console.Clear();

break;

case 2:
Console.WriteLine("\tHär är alla dina sparade inlägg: ");
foreach(var bloggInlägg in Bloggen) //Loopar igenom listan "Bloggen"
{
Console.WriteLine(inlägg[2]); //Datum och tid

foreach(var post in bloggInlägg) //Plockar fram respektive vektor med sparade inlägg
{
Console.WriteLine("\t" + post); //Utskrift med alla sparade inlägg i strängvektorn
}

}
Console.ReadLine();
break;

case 3:
Console.Write("\tSkriv in titeln på det inlägg du söker: ");
string sökning = Console.ReadLine();

for(int i = 0;i < Bloggen.Count; i++)
{

string[] användarInlägg = Bloggen[i];

if (sökning == användarInlägg[0] || sökning == användarInlägg[i])
{
Console.Clear();
Console.WriteLine("\tDin sökning lyckades, här är inlägget du sökte efter: \n\n\t" + användarInlägg[0] +"\n\t"+ "\n\t" + användarInlägg[1] +"\n\t" + användarInlägg[2]); //Hittas ett sparat inlägg skrivs det ut
break;
}

else
{
Console.WriteLine("\tDin sökning misslyckades!"); // Annars får man detta felmeddelande
}

}
Console.ReadLine();
break;

case 4:
Bloggen.Clear(); //Rensar listan på innehåll
Console.WriteLine("\n\tBlogginlägg rensade!");
Console.ReadLine();
break;

case 5:
Console.WriteLine("\n\tTack för din tid och välkommen åter till bloggen!");
Thread.Sleep(2000);
minBool = false;
break;

default:
Console.WriteLine("\n\tDu har matat in något felaktigt, var vänlig välj ett av alternativen i menyn!"); //
Console.ReadLine();
break;
}

}

}
static void användarMeny()
{
Console.Clear();

Console.WriteLine("\t----*Välkommen till bloggen!*----\n\n" + "\tGör ditt menyval:\n");
Console.WriteLine("\t[1] Skriv nytt inlägg");
Console.WriteLine("\t[2] Visa alla dina sparade inlägg");
Console.WriteLine("\t[3] Sök efter ett inlägg");
Console.WriteLine("\t[4] Rensa alla inlägg");
Console.WriteLine("\t[5] Avsluta program");
}
}
}

Permalänk
Medlem

Problemet är din if-sats när du söker:

if (sökning == användarInlägg[0] || sökning == användarInlägg[i])

Att indexera användarInlägg med i blir fel eftersom användarInlägg är ett specifikt inlägg medan i är inläggets index i listan.

Permalänk
Medlem

Hmm okej, tror jag förstår. Vad kan jag då jämföra "sökning ==" med för att söka efter alla användarens titlar om nu användaren skulle gjort te.x 5 inlägg med 5 olika titlar?

Permalänk
Medlem

Nu har du inte bett om en allmän kodgranskning men jag kan inte hålla mig

Skriv aldrig aldrig aldrig kod på svenska eller något annat språk än engelska. Börja denna goda vana redan idag.
Skriv aldrig aldrig med två L.

Permalänk
Medlem

Haha, får tänka på det i fortsättningen! Har endast sysslat med detta i några veckor så man är bra grön än!

Permalänk
Medlem
Skrivet av Lillfill:

Hmm okej, tror jag förstår. Vad kan jag då jämföra "sökning ==" med för att söka efter alla användarens titlar om nu användaren skulle gjort te.x 5 inlägg med 5 olika titlar?

Du har ingen plats att spara användare, dvs varje Array i bloggInlägg saknar användar-data, så det går inte.

Permalänk
Medlem

Detta skulle kunna vara ett alternativ för att ha koll på användare

case 1: Console.Write("\tSkriv in titel: "); inlägg[0] = Console.ReadLine(); //Sparar titel på blogginlägg Console.Write("\tSkriv ditt inlägg: "); inlägg[1] = Console.ReadLine(); //Sparar inlägget inlägg[2] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //Sparar datum och tid när inlägget blev publicerat Console.Write("\tSkriv ditt namn: "); inlägg[3] = Console.ReadLine(); //Sparar titel på blogginlägg Bloggen.Add(inlägg); //Lägger till inläggen i listan Bloggen Console.WriteLine("\tDitt blogginlägg är sparat!"); Console.ReadLine(); Console.Clear(); break;

och koden för sökning blir typ...

case 3: Console.Write("\tSkriv in titeln på det inlägg du söker: "); string sökning = Console.ReadLine(); Console.Write("\tvem är du (var ärlig): "); string user = Console.ReadLine(); for (int i = 0; i < Bloggen.Count; i++) { string[] användarInlägg = Bloggen[i]; if (sökning == användarInlägg[0] || user == användarInlägg[3]) { Console.Clear(); Console.WriteLine("\tDin sökning lyckades, här är inlägget du sökte efter: \n\n\t" + användarInlägg[0] + "\n\t" + "\n\t" + användarInlägg[1] + "\n\t" + användarInlägg[2]); //Hittas ett sparat inlägg skrivs det ut break; } else { Console.WriteLine("\tDin sökning misslyckades!"); // Annars får man detta felmeddelande } } Console.ReadLine(); break;

Permalänk
Medlem
Skrivet av Lillfill:

Hmm okej, tror jag förstår. Vad kan jag då jämföra "sökning ==" med för att söka efter alla användarens titlar om nu användaren skulle gjort te.x 5 inlägg med 5 olika titlar?

Du söker ju redan efter alla titlar med användarInlägg[0], eftersom den ligger i en loop som går igenom alla inlägg. Så just nu söker du igenom alla titlar, men du försöker även söka igenom något annat vilket är där det går fel.

Permalänk
Medlem

Många tack, fixat!