Permalänk
Medlem

c# vektor och for-loopar

Hej,

Har stött på ett problem med detta program som ska vara inlämnat 23:59 ikväll. Problemet är i "case 3:" att den endast går igenom första indexet i vektorn och sedan återgår till menyn. Hur får jag den att gå igenom hela vektorn innan den skriver ut om det man söker efter finns eller inte?

namespace Inlämning_vektorer_rygga
{
internal class Program
{
static void Main(string[] args)
{
string[] föremål = new string[5];
bool minBool = true;

while (minBool)
{
Console.WriteLine("[1] Lägg till 5 föremål i ryggsäcken");
Console.WriteLine("[2] Visa allt innehåll i ryggsäcken");
Console.WriteLine("[3] Sök efter ett specifikt föremål");
Console.WriteLine("[4] Avsluta programmet");

string menyVal = Console.ReadLine();
switch (menyVal)
{
case "1":
{
for (int i = 0; i < föremål.Length; i++)
{
Console.Write("Skriv in de 5 föremål du vill lägga i ryggsäcken: ");
föremål[i] = Console.ReadLine();
Console.WriteLine("Du har lagt till " + föremål[i] + " i ryggsäcken");
}
break;
}
case "2":
{
for (int i = 0; i < föremål.Length; i++)
{
Console.WriteLine(" I ryggsäcken finns: " + föremål[i]);
föremål[i] = Console.ReadLine();
}
break;
}
case "3":
{
Console.WriteLine("Skriv vad du vill söka efter: ");
string sökord = Console.ReadLine();
for (int i = 0; i < föremål.Length; i++)

{
if (sökord.ToUpper() == föremål[i].ToUpper())
{
Console.WriteLine("Din sökning lyckades, " + föremål[i] + " finns i ryggsäcken!");
Console.ReadLine();
break;
}

else
{
Console.WriteLine("Det du söker efter finns inte i ryggsäcken");
Console.ReadLine();
break;
}

}
break;

}
case "4":
{
minBool = false;
break;
}

}
}
}
}
}

Permalänk
Medlem

Du måste som du säger gå igenom hela vektorn för att kunna avgöra om föremålet inte finns, vilket innebär att utskrifterna måste ligga efter for-loopen istället för inne i den. Så du måste på något sätt komma ihåg om något hittades eller ej så att du kan kontrollera det efter loopen, vilket lämpligtvis görs med t.ex. en bool-variabel.

Permalänk
Medlem

I din loop så breakar du ut om du inte hittar det du letar efter på första platsen:

else { Console.WriteLine("Det du söker efter finns inte i ryggsäcken"); Console.ReadLine(); break; }

Du vill nog skriva ut det medelandet utanför loopen, och om det skall fungera så bör du kanske använda dig av en mellanlagring i form av bool eller kanske strängen du hittat. Efter loopen så kollar du om strängen är tom, eller om hittaflaggan ej är satt, och skriver ut "Det du söker efter finns inte i ryggsäcken".

Edit: för sent, hade visst haft tabben öppen en stund

Permalänk
Medlem

Det var lätt fixat när man väl såg det. Suttit och stirrat mig blind på detta i timmar nu utan resultat! Tusen tack hörrni 🙌