Permalänk

C# sök, vektor

Hej. Har nyligen börjat lära mig C# och har kört fast och tror jag lite ''stirrat mig blind'' för problemen.
Håller på med program innehållande bla strängvektor på 5 element, och for-loop ska användas i case 1,2 och 3.

I case 3 ska jag skapa en falsk bool som blir sann, annars hållas falsk och skriva ut passande medelande.
Det de problem jag mest har nu är att jag inte riktigt kommer överfund med boolen i Case 3 och även att sökningen blir lite slumpmässig, jag kan söka samma ord flertal gånger och ibland lyckas sökning och ibland står det att ordet inte finns. Även att jag skulle vilja att man söker en gång och sen kommer till menyn men istället behöver man söka flera gånger innan man kommer tillbaka till menyn, har provat lite olika med for-loopen men får de inte rätt.

Har lagt in minBool som komentarer för att förtydliga vart jag tolkar att boolen ska vara placerad.
Menyn ser ut såhär:
Console.WriteLine("Gör ett menyval: ");
Console.WriteLine("1) Lägg till föremål.");
Console.WriteLine("2) Skriv ut alla föremål.");
Console.WriteLine("3) Sök föremål.");
Console.WriteLine("4) Avsluta");
Int32.TryParse(Console.ReadLine(), out int menyVal);

och case 3 som jag skulle vilja ha lite råd om hur att komma ur denna ''blindcirkeln'' jag hamnat i för att komma vidare:
for (int i = 0; i < rygga.Length; i++)
{
// bool minBool = false;
Console.Write("Skriv in ett sökord: ");
string sökOrd = Console.ReadLine();
if
(rygga[i].ToUpper() == sökOrd.ToUpper())
Console.WriteLine("Ditt sökord " + rygga[i] + " finns med bland de tillagda förmålen");
// minBool = true;
else
//minBool = false;
Console.WriteLine("Ditt sökord finns inte bland föremålen.");
}
break;

Tack i förhand, MVH

Permalänk
Medlem

Hej!

Jag kan ge dig några tips som kan hjälpa dig att lösa dina problem med sökningen och boolen i ditt C#-program.

Sökning:
För att lösa ditt problem med slumpmässig sökning, skulle jag rekommendera att du använder en annan typ av loop som till exempel en while-loop istället för en for-loop. På detta sätt kan du göra sökningen tills du hittar det sökta ordet eller tills användaren väljer att gå tillbaka till menyn.
Här är ett exempel på hur du kan göra det:

bool hittad = false;
while (!hittad)
{
Console.Write("Skriv in ett sökord: ");
string sökOrd = Console.ReadLine();
for (int i = 0; i < rygga.Length; i++)
{
if (rygga[i].ToUpper() == sökOrd.ToUpper())
{
Console.WriteLine("Ditt sökord " + rygga[i] + " finns med bland de tillagda förmålen");
hittad = true;
break;
}
}
if (!hittad)
{
Console.WriteLine("Ditt sökord finns inte bland föremålen.");
}
}

I detta exempel används en while-loop som fortsätter att köra tills användaren hittar det sökta ordet. Om ordet hittas sätts bool-variabeln hittad till true, och looparna bryts.

Boolen:
För att lösa problemet med boolen, kan du sätta den till true direkt när ordet hittas i for-loopen, och sedan använda den efter loopen för att avgöra om ordet hittades eller inte.
Här är ett exempel på hur du kan göra det:

bool hittad = false;
for (int i = 0; i < rygga.Length; i++)
{
if (rygga[i].ToUpper() == sökOrd.ToUpper())
{
hittad = true;
break;
}
}
if (hittad)
{
Console.WriteLine("Ditt sökord " + sökOrd + " finns med bland de tillagda förmålen");
}
else
{
Console.WriteLine("Ditt sökord finns inte bland föremålen.");
}

I detta exempel sätts bool-variabeln hittad till true direkt när ordet hittas i for-loopen. Efter loopen kan du sedan använda variabeln för att avgöra om ordet hittades eller inte, och skriva ut rätt meddelande till användaren.

Jag hoppas att dessa tips hjälper dig att lösa dina problem och komma vidare med ditt C#-program! Lycka till!

Permalänk
Medlem

Ditt problem är att du deklarerar bool:en och läser in sökordet inne i sök-loopen, du måste göra detta före loopen annars kommer du ju t.ex. behöva skriva in lika många sökord som det finns element i arrayen.

Permalänk

Tack för ditt svar, det var gott för huvudet att inte bara stå och trampa på samma ställe, men nu blev sökningen lite tokig på nytt. Nu spelar det ingen roll vad jag skriver så visar programmet en "lyckad sökning" och skriver ut de sparade orden i ordning. Min kod i case 3 ser ut såhär nu med detta problem:
bool minBool = false;
while (!minBool)

{
Console.Write("Skriv in ett sökord: ");
string sökOrd = Console.ReadLine();
for (int i = 0; i < rygga.Length; i++)
{
if (rygga[i].ToUpper() == sökOrd.ToUpper());

Console.WriteLine("Ditt sökord " + rygga[i] + " finns med bland de tillagda förmålen");
Console.ReadLine();
minBool = true;
if (!minBool)

Console.WriteLine("Ditt sökord finns inte bland föremålen.");
}
}

Permalänk

Ingen bra koll på C#, men ser ut som att du har avslutat din if-sats direkt efter jämförelsen.

Permalänk
Medlem

Det blir lättare att läsa om man använder code taggarna #19309720

Som ovan skrev, du avslutar dina if sats block fel.
Dina klamrar verkar inte stämma, jag rekommenderar att du alltid använder klamrar tills du har koll på det i dina if satser:

if(rygga[i].ToUpper() == sökOrd.ToUpper()){ // kod som ska köras ifall det stämmer }

Du kan även använda en rads if satser, vilket förklarar varför koden ovan fortfarande kompilerar. Du kan t.ex. göra så här när du har bättre förståelse för kod flöde(inte för att det är användbart i det här fallet men det finns andra när det kan städa upp mycket):

if(rygga[i].ToUpper() != sökOrd.ToUpper()) continue;

Permalänk

Tack till alla som tog er tid, ska läsa igenom era tips och arbeta vidare. Tack igen!!