Hjälp med C# Linjär sökning och TryParse

Permalänk
Medlem

Hjälp med C# Linjär sökning och TryParse

Hej!
Har fastnat med en uppgift i min Programmering 1 kurs.
Har titta hit, googlat, läste på MSDN allt och kan inte hitta den liten delan som skulle hjälpa mig att förstår det jag gör fel
(också ber om ursäkt för min dåligt svenska, försöker men är engelskt talande)

Ni har säkert sett den här uppgift här, Ryggsäck med vektorer och linjär sökning.
Jag behöver ser till att programmet hantera felaktig inmatning med TryParse, kan inte förstår var det borde ligga i koden och om jag har faktist skrivet rätt TryParse.

behöver göra det så att användaren kan söka i ryggsäcken med en linjär sökning av innehållet i ryggsäck. Det har jag på riktigt fastnat med. jag kanske förstår uppgiften på fel sätt, det står "Linjär sökning av innehållet i ryggsäcken"
menar de att de kan söka efter nummret de har sparat eller att de söka nummret de har sparat och får index nummer som svar?

Här är min kod, vet det kanske ser ute dåligt, är nybörjare självklart och försöker.
Hoppas att nån kan hjälpa mig att förstår vad jag gör för fel!
Tusen Tack!!!

static void Main(string[] args)
{

string[] ryggSäck = new string[5];
ryggSäck[0] = "";
ryggSäck[1] = "";
ryggSäck[2] = "";
ryggSäck[3] = "";
ryggSäck[4] = "";

bool minMeny = true;

while (minMeny)
{
Console.WriteLine("Välkommen till din Ryggsäck!");
Console.WriteLine("[1] Lägg till ett föremål");
Console.WriteLine("[2] Skriv ut alla föremål");
Console.WriteLine("[3] Sök i ryggsäcken");
Console.WriteLine("[4] Avsluta ryggsäcken");

string MenyInput = Console.ReadLine();

??????????????????(Fel plats och kanske fel skriven kod??????

//Int32.TryParse(Console.ReadLine(), out int result);

switch (MenyInput)
{
case "1":
for (int i = 0; i < ryggSäck.Length; i++)
{
Console.WriteLine("Sparar i ryggsäck: " + i);
ryggSäck[i] = Console.ReadLine();

}

break;

case "2":
for (int i = 0; i < ryggSäck.Length; i++)
{
Console.WriteLine(ryggSäck[i]);
}
break;

case "3":
//Search with linear??
Console.WriteLine("Söka: ");
string sökord = Console.ReadLine();

for (int i = 0; i < ryggSäck.Length; i++)
{
if (ryggSäck[i].ToLower() == sökord.ToLower())
Console.WriteLine("Du har sparat " + ryggSäck[i]);
}
break;

case "4":
minMeny = false;

{
Console.WriteLine("Tack för den gången!");
Console.ReadLine();
}
break;

Permalänk
Medlem
Skrivet av McB12:

Hej!
Har fastnat med en uppgift i min Programmering 1 kurs.
Har titta hit, googlat, läste på MSDN allt och kan inte hitta den liten delan som skulle hjälpa mig att förstår det jag gör fel
(också ber om ursäkt för min dåligt svenska, försöker men är engelskt talande)

Ni har säkert sett den här uppgift här, Ryggsäck med vektorer och linjär sökning.
Jag behöver ser till att programmet hantera felaktig inmatning med TryParse, kan inte förstår var det borde ligga i koden och om jag har faktist skrivet rätt TryParse.

behöver göra det så att användaren kan söka i ryggsäcken med en linjär sökning av innehållet i ryggsäck. Det har jag på riktigt fastnat med. jag kanske förstår uppgiften på fel sätt, det står "Linjär sökning av innehållet i ryggsäcken"
menar de att de kan söka efter nummret de har sparat eller att de söka nummret de har sparat och får index nummer som svar?

Här är min kod, vet det kanske ser ute dåligt, är nybörjare självklart och försöker.
Hoppas att nån kan hjälpa mig att förstår vad jag gör för fel!
Tusen Tack!!!

static void Main(string[] args) { string[] ryggSäck = new string[5]; ryggSäck[0] = ""; ryggSäck[1] = ""; ryggSäck[2] = ""; ryggSäck[3] = ""; ryggSäck[4] = ""; bool minMeny = true; while (minMeny) { Console.WriteLine("Välkommen till din Ryggsäck!"); Console.WriteLine("[1] Lägg till ett föremål"); Console.WriteLine("[2] Skriv ut alla föremål"); Console.WriteLine("[3] Sök i ryggsäcken"); Console.WriteLine("[4] Avsluta ryggsäcken"); string MenyInput = Console.ReadLine(); ??????????????????(Fel plats och kanske fel skriven kod?????? //Int32.TryParse(Console.ReadLine(), out int result); switch (MenyInput) { case "1": for (int i = 0; i < ryggSäck.Length; i++) { Console.WriteLine("Sparar i ryggsäck: " + i); ryggSäck[i] = Console.ReadLine(); } break; case "2": for (int i = 0; i < ryggSäck.Length; i++) { Console.WriteLine(ryggSäck[i]); } break; case "3": //Search with linear?? Console.WriteLine("Söka: "); string sökord = Console.ReadLine(); for (int i = 0; i < ryggSäck.Length; i++) { if (ryggSäck[i].ToLower() == sökord.ToLower()) Console.WriteLine("Du har sparat " + ryggSäck[i]); } break; case "4": minMeny = false; { Console.WriteLine("Tack för den gången!"); Console.ReadLine(); } break;

Om du omger din kod med "code"-taggar så är det enklare att läsa.

TryParse ger ju en bool som svar så du får använda den helt enkelt. Alltså typ:

var isInt = int.TryParse(Console.ReadLine(), out int result); if(isInt) { --använd result här } else { --be användaren försöka skriva in en siffra igen }

Sen läser du inputen både till MenyInput och i din (bortkommenterade) TryParse. Du kan använda MenyInput om du vill för mellanlagring, men då borde du ju använda den i din TryParse:

int.TryParse(MenyInput, out int result)...

Sen råder jag dig att använda en loop, while, när du parsar istället så att du loopar och ber om ny input och parsar den så länge användaren inte skrivit in en siffra.

Permalänk
Medlem

Finns massa coola grejer man kan göra men vill inte skrämma dig med dem, men en lätt grej du kan göra är att istället för att sätta arrayen till tom sträng för varje index över flera rader. Se exempel.

string[] weekDays = new string[] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };

Permalänk
Medlem
Skrivet av snajk:

Om du omger din kod med "code"-taggar så är det enklare att läsa.

TryParse ger ju en bool som svar så du får använda den helt enkelt. Alltså typ:

var isInt = int.TryParse(Console.ReadLine(), out int result); if(isInt) { --använd result här } else { --be användaren försöka skriva in en siffra igen }

Sen läser du inputen både till MenyInput och i din (bortkommenterade) TryParse. Du kan använda MenyInput om du vill för mellanlagring, men då borde du ju använda den i din TryParse:

int.TryParse(MenyInput, out int result)...

Sen råder jag dig att använda en loop, while, när du parsar istället så att du loopar och ber om ny input och parsar den så länge användaren inte skrivit in en siffra.

Hej!
Tack! det blir lite mer tidiligt för mig nu, men det är jag väldigt förvirrad med är var i koden jag placera alla TryParse koden.

Permalänk
Medlem
Skrivet av McB12:

Hej!
Tack! det blir lite mer tidiligt för mig nu, men det är jag väldigt förvirrad med är var i koden jag placera alla TryParse koden.

Det kan vara en bra ide att börja med att skriva ner hur du vill att programmet ska fungera i grova drag, t.ex.:

Visa meny Läs in alternativ från användaren Om alternativ 1: ... Om alternativ 2: ... etc

Som nybörjare kan det annars vara lätt att gå vilse om man både ska planera programflödet och skriva kod samtidigt.