Permalänk
Medlem

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
Permalänk
Medlem

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

Visa signatur

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

Permalänk
Medlem

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]

Permalänk
Medlem

@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];

Visa signatur

| Ryzen 5800x | Asus prime x470 pro | Asus rtx 3080 tuf oc | Gskill 32gb 3,6ghz | aw3225qf |

Permalänk
Medlem

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.