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

LÖST Hjälp med sökfunktion i C#

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..");
                }

        }
    }
}

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Postad (redigerade)

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.

Redigerad av .M

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Postad (redigerade)

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.

Redigerad av i3o6

Dela detta inlägg


Länk till inlägg
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.

Dela detta inlägg


Länk till inlägg
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 !

Dela detta inlägg


Länk till inlägg
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 !

Dela detta inlägg


Länk till inlägg
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

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...