Just nu i M3-nätverket
Jump to content

Hjälp med sökfunktion i C#


udayh

Recommended Posts

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

        }
    }
}
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

  • 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 !

Link to comment
Share on other sites

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 !

Link to comment
Share on other sites

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

 

Console.writeline mylist + input

if (myList == input)

 

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

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...