Just nu i M3-nätverket
Gå till innehåll

Hjälp med sökfunktion i C#


udayh

Rekommendera Poster

Behöver hjälp med den här koden, den fungerar förutom att sökningsfunktionen strular...har gjort om och ändrat några gånger men jag förstår inte felet.
Dels så hittar den bara det senast skriva inlägget och skriver ut "Din sökning misslyckades" även om jag vet att ett inlägg ska finnas, den skriver dessutom ut det lika många gånger som det finns inlägg i loggboken. 

Dvs: Skriv tre inlägg. Det senaste inlägget är sökbart. De andra två hittas inte och den skriver då ut "Din sökning misslyckades" tre gånger(lika många gånger som det finns inlägg i loggboken) Tips och hjälp? 

 class Program
    {
        static void Main(string[] args)
        {
            List<string> loggBok = new List<string> { };
            DateTime tiden = DateTime.Now;
            Console.WriteLine(tiden);

            string inlagg = "";
            string logg = "";
            string titel = "";
            
            bool isRunning = true;
            while (isRunning)
                try
                {
                    {
                        Console.WriteLine("\nVälkommen till loggboken!");

                        Console.WriteLine("[1] Skriv nytt inlägg i loggboken");
                        Console.WriteLine("[2] Sök inlägg i loggboken");
                        Console.WriteLine("[3] Skriv ut alla loggar");
                        Console.WriteLine("[4] Avsluta programmet");

                        Console.Write("\nGör ett val i menyn: ");

                        int menyVal = Convert.ToInt32(Console.ReadLine());


                        switch (menyVal)
                        {
                            case 1:
                                Console.Write("Skriv in titel på ditt inlägg: ");
                                titel = Console.ReadLine();
                                Console.Clear();
                                Console.WriteLine("Skriv ditt inlägg: ");
                                Console.WriteLine(tiden);
                                Console.WriteLine(titel);

                                inlagg = Console.ReadLine();
                                logg = tiden + "\n" + titel + "\n" + inlagg;
                                loggBok.Add(logg);

                                break;

                            case 2:
                                Console.WriteLine("Skriv in ett ord du vill söka efter i loggboken");
                                var nyckelord = Console.ReadLine();

                                foreach (var inlägg in loggBok)
                                {
                                    if (inlagg.Contains(nyckelord))
                                    {
                                        Console.WriteLine(logg);
                                    }
                                    else
                                    {
                                        Console.WriteLine("Din sökning misslyckades... ");
                                    }
                                }
                                break;

                            case 3:
                                Console.WriteLine("Dessa loggar finns i loggboken\n ");
                                foreach (string loggboken in loggBok)
                                {

                                    Console.WriteLine(loggboken);

                                }

                                Console.WriteLine("Tryck på valfri tangent för att återgå till menyn...");
                                Console.ReadKey();
                                break;

                            default:
                                Console.WriteLine("Gör ett val i menyn...");
                                break;

                            case 4:
                                return;

                        }

                    }
                }

                catch
                {
                    Console.WriteLine("Nu blev det fel, gör ett val i menyn..");
                }

        }
    }
}
Länk till kommentar
Dela på andra webbplatser

Jag skulle föreslå att du använder Linq istället för enbart loopar. Mycket enklare, kraftfullare och flexiblare.

Det här fungerar

 

case 2:
                        Console.WriteLine("Skriv in ett ord du vill söka efter i loggboken");
                        var nyckelord = Console.ReadLine();
var entries = loggBok.Where(entry => entry.Contains(nyckelord));
                          foreach (var entry in entries)
                        {
                            Console.WriteLine(entry);
                        }
                        if (entries.Count() == 0)
                        {
                            Console.Write("Din sökning misslyckades...");
                        }
                        break;
 

Sen skulle jag rekommendera att du inte använder svenska ord för variabler etc och framförallt inte svenska tecken som å, ä och ö. Det är kanske mer en personlig sak, men svenska tecken bör du undvika då det kan ställa till det.

Länk till kommentar
Dela på andra webbplatser

Du deklarerar 'inlägg' men använder 'inlagg'.

Du skriver ut 'misslyckad sökning' i loopen efter att du testat varje inlägg så det är inte konstigt att du får meddelandet flera ggr.

Länk till kommentar
Dela på andra webbplatser

Jag skulle föreslå att du använder Linq istället för enbart loopar. Mycket enklare, kraftfullare och flexiblare.

Det här fungerar

 

case 2:
                        Console.WriteLine("Skriv in ett ord du vill söka efter i loggboken");
                        var nyckelord = Console.ReadLine();
var entries = loggBok.Where(entry => entry.Contains(nyckelord));
                          foreach (var entry in entries)
                        {
                            Console.WriteLine(entry);
                        }
                        if (entries.Count() == 0)
                        {
                            Console.Write("Din sökning misslyckades...");
                        }
                        break;
 

Sen skulle jag rekommendera att du inte använder svenska ord för variabler etc och framförallt inte svenska tecken som å, ä och ö. Det är kanske mer en personlig sak, men svenska tecken bör du undvika då det kan ställa till det.

 

Tack så mycket för svaret, blev hur bra som helst! Ändrade till variabelnamn på engelska och kommer använda det i fortsättningen.

Länk till kommentar
Dela på andra webbplatser

  • 1 year later...

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace loggboken
{
class Program
{
static void Main(string[] args)


{
bool running = true;

List<string[]> myBook = new List<string[]> { };
var date = "";


// skapar en ny lista för att spara alla inlägg

while (running)

{
string[] myList = new string[3];
Console.WriteLine("\n Välkommen till Loggboken !");
Console.WriteLine("\t1. Skriv nytt inlägg");
Console.WriteLine("\t2. Se alla loggar");
Console.WriteLine("\t3. Sök inlägg");
Console.WriteLine("\t4. Avsluta programmet");
Console.WriteLine("\tVälj : ");
int menyChoice = 0;

try
{
menyChoice = Convert.ToInt32(Console.ReadLine());
}
catch
{
Console.WriteLine("Bara siffror !");
Console.ReadLine();
}
if (menyChoice > 5)
{
Console.WriteLine("Bara mellan 1 -4 !");
Console.ReadLine();
}


switch (menyChoice)
{
case 1:
{

Console.Write("Titel : ");
myList[0] = Console.ReadLine();

Console.Write("Inlagg : ");
myList[1] = Console.ReadLine();

date = DateTime.Now.ToString("yyyy-MM-dd");
myBook.Add(myList);

break;
}


case 2:

Console.WriteLine("Alla loggar");

foreach (var item in myBook)
{
Console.WriteLine(date);
foreach (var name in item)
Console.WriteLine("\n" + name);

}
break;




case 3:

Console.WriteLine("Sok upp inlagg : ");
string input = Console.ReadLine();

for (int i = 0; i < myList.Length; i++)

{
if (myList == input)
{
Console.WriteLine("Hittades !"); Här skriver den inte ut "Hittades !"
Console.ReadLine();

}
}


break;





case 4:

running = false;
Console.ReadLine();
break;

}

}
}
}
}



Det är väldigt bråttom ! Måste bli klar så snabbt som möjligt !

Tacksam för hjälp någon !

Länk till kommentar
Dela på andra webbplatser

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace loggboken
{
class Program
{
static void Main(string[] args)


{
bool running = true;

List<string[]> myBook = new List<string[]> { };
var date = "";


// skapar en ny lista för att spara alla inlägg

while (running)

{
string[] myList = new string[3];
Console.WriteLine("\n Välkommen till Loggboken !");
Console.WriteLine("\t1. Skriv nytt inlägg");
Console.WriteLine("\t2. Se alla loggar");
Console.WriteLine("\t3. Sök inlägg");
Console.WriteLine("\t4. Avsluta programmet");
Console.WriteLine("\tVälj : ");
int menyChoice = 0;

try
{
menyChoice = Convert.ToInt32(Console.ReadLine());
}
catch
{
Console.WriteLine("Bara siffror !");
Console.ReadLine();
}
if (menyChoice > 5)
{
Console.WriteLine("Bara mellan 1 -4 !");
Console.ReadLine();
}


switch (menyChoice)
{
case 1:
{

Console.Write("Titel : ");
myList[0] = Console.ReadLine();

Console.Write("Inlagg : ");
myList[1] = Console.ReadLine();

date = DateTime.Now.ToString("yyyy-MM-dd");
myBook.Add(myList);

break;
}


case 2:

Console.WriteLine("Alla loggar");

foreach (var item in myBook)
{
Console.WriteLine(date);
foreach (var name in item)
Console.WriteLine("\n" + name);

}
break;




case 3:

Console.WriteLine("Sok upp inlagg : ");
string input = Console.ReadLine();

for (int i = 0; i < myList.Length; i++)

{
if (myList == input)
{
Console.WriteLine("Hittades !"); Här skriver den inte ut "Hittades !"
Console.ReadLine();

}
}


break;





case 4:

running = false;
Console.ReadLine();
break;

}

}
}
}
}



Det är väldigt bråttom ! Måste bli klar så snabbt som möjligt !

Tacksam för hjälp någon !

Länk till kommentar
Dela på andra webbplatser

for (int i = 0; i < myList.Length; i++){

 

Console.writeline mylist + input

if (myList == input)

 

...så ser du kanske felet själv

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...