Trädvy Permalänk
Medlem
Registrerad
Mar 2017

Linjärsökning.

Hej,

jag är helt ny på programmering och C#, jag har en uppgift där man skapar en loggbok som som användaren ska kunna skriva inlägg i och sen kunna söka efter inläggen. Sökningen ska vara linjär. Jag har inte kunnat testköra programmet än eftersom det är en bugg under LinearSearch. Men förstår inte hur jag ska lösa buggen!? Programmet är inte klart på länga vägar så vissa Case är lummiga, men det är inte det jag behöver hjälp med (än).
Är det någon som förstår som kan hjälpa mig?

Tack på förhand! /Emilie

{ // Ny klass. class MyTitel { string text; string titel; // METOD: konstruktor public MyTitel(string titel) { this.titel = titel; } // Egenskap för titel public string Titel { get { return titel; } set { titel = value; } } class Program { // Linjärsökning. static string LinearSearch(List<MyTitel> list, string key) { for (int i = 0; i < list.Count; i++) { if (list[i].Titel == key) return i; <-----------( Mitt problem, röd linje under i) '' Cannot implicitly convert type 'int' to 'string' '' } return null; } } static void Main(string[] args) { bool isRunning = true; // Skapar lista för titel. List<string> myTitel = new List<string>(); List<string> myText = new List<string>(); while (isRunning) { // Menyval. Console.WriteLine("\n\t-----VÄLKOMMEN-----"); Console.WriteLine("\n\t[1]Skriv ett nytt inlägg."); Console.WriteLine("\n\t[2]Sök bland inlägg."); Console.WriteLine("\n\t[3]Skriv ut alla loggar."); Console.WriteLine("\n\t[4]Avsluta programmet."); // Menyval konverteras till string. TryParse för förhindra krasch. int nr; Int32.TryParse(Console.ReadLine(), out nr); switch (nr) { case 1: Console.WriteLine("\n\t Skriv en titel."); myTitel.Add(Console.ReadLine()); Console.WriteLine("\n\t Skriv din text."); myText.Add(Console.ReadLine()); break; case 2: // sök bland inlägg. Console.WriteLine("\n\t Skriv in titel på det inlägg du söker."); string str = Console.ReadLine(); break; case 3: // Skriv ut alla loggar foreach (string item in myTitel) { Console.WriteLine(item); } foreach (string item in myText) { Console.WriteLine(item); } break; case 4: isRunning = false; break; } Console.ReadLine(); } } } }

Lagt till Code-taggar /screamin-daemon, moderator
Trädvy Permalänk
Medlem
Plats
Eskilstuna
Registrerad
Jan 2003

static string LinearSearch(List<MyTitel> list, string key)
{
for (int i = 0; i < list.Count; i++)
{
if (list[i].Titel == key)
return i; <-----------( Mitt problem, röd linje under i) '' Cannot implicitly convert type 'int' to 'string' ''
}
return null;
}

Din funktion LinearSearch ska returnera en string datatyp men i ditt exempel så returnerar du i som är en int. Det är därför du får ett fel. Byt ut till static int LinearSearch.. så borde du komma vidare

i7-920 || Asus P6T SE || 12 GB DDR3 || GTX 970

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2007

LinearSearch ska returnera en string, men du försöker returnera i som är en int. Så du måste antingen ändra så att LinearSearch returnerar en int, eller returnera något annat.

Använd gärna code-taggar för kod, så behålls formateringen och gör den lättare att läsa. D.v.s.:
[​code]
Kod här
[​/code]

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Mar 2004

@Lamp:
Det du returnerar nu är ditt Index, dvs positionen i listan men din funktion förväntar sig att du ska returnera en sträng:

//för att returnera ett heltal ändra till static int LinearSearch static string LinearSearch(List<MyTitel> list, string key)

Nu vet jag inte vad du tänkt dig att funktionen skulle returnera. Ett annat alternativ skulle vara att returnera hela objektet.

ex

static MyTitle LinearSearch(List<MyTitel> list, string key) ... return list[i];

| i5 6500 | asus z170-k | asus 970 strix | 16gb ddr4 | asus mg279Q | FD Define r4

Trädvy Permalänk
Medlem
Registrerad
Mar 2017

Tack för era svar! Ändrade till int och buggen försvann.
Tror ni detta är rätt metod för att söka i programmet. Alltså att söka i en titel som användaren skrivit in?
Ska jag använda mig av Foreach som står i case 3 tillsammans med For för att söka, för nu söker den inte på titeln.