Permalänk

Hjälp med sökfunktion i C#

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 titel = ""; string logg = ""; string inlagg = ""; 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örval i menyn: "); int menyVal = Convert.ToInt32(Console.ReadLine()); switch (menyVal) { case 1: Console.Write("Skriv en 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 sökord"); var keyword = Console.ReadLine(); foreach (var inlägg in loggBok) { if (inlagg.Contains(keyword)) { Console.WriteLine(logg); } else { Console.WriteLine("Din sökning misslyckades... "); } } break; case 3: Console.WriteLine("De här loggarna 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.."); } } } }

Permalänk
Medlem

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

Koden ovan loopar ju igenom alla dina inlägg i loggboken och antingen kommer du att skriva ut logg eller så kommer du att skriva ut Din sökning misslyckades. För alla inlägg.

Logg kommer att vara satt till det senaste som variabeln innehåller. Det du vill ha är inlägg där. Fast det är dumt att blanda variabelnamn. Ett enkelt sätt att lösa det på är att lägga till en boolean om sökningen lyckas.

bool träff = false; foreach (var logg in loggBok) { if(logg.Contains(keyword)) { Console.WriteLine(logg); träff = true; } } if(!träff) { Console.WriteLine("Din sökning misslyckades... "); } break;

! betyder not så om träff fortfarande är false efter loopen så skrivs den texten ut.

EDIT: Rättade till lite,

Permalänk

Hej jag är helt ny till detta forum och vet inte hur man gör en egen tråd.

Jag behöver nämligen hjälp med en skoluppgift som jag verkligen inte förstår den ska vara inlämnad idag kl 24.00 vid skolans hemsida och jag får verkligen stress.

https://dl.dropboxusercontent.com/u/78075226/programmering/Bi...
https://antbring.wordpress.com/

Dessa är sidorna för uppgiften jag skulle vara väldigt glad för att få lite hjälp .

Permalänk
Medlem
Skrivet av furkishhh:

Hej jag är helt ny till detta forum och vet inte hur man gör en egen tråd.

Jag behöver nämligen hjälp med en skoluppgift som jag verkligen inte förstår den ska vara inlämnad idag kl 24.00 vid skolans hemsida och jag får verkligen stress.

https://dl.dropboxusercontent.com/u/78075226/programmering/Bi...
https://antbring.wordpress.com/

Dessa är sidorna för uppgiften jag skulle vara väldigt glad för att få lite hjälp .

Skriv vad du vill ha hjälp med istället. Vi är här för att hjälpa och inte göra det åt dig, speciellt inte en skoluppgift.
Kanske skulle ha planerat lite bättre och frågat tidigare?

Kollade dessutom igen uppgiften och det är verkligen inget komplicerat, du har t.o.m. fått hjälp med en kodsnutt i slutet.

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk

uppgiftskolan

@Pamudas:

Du har fullständigt rätt, jag vart sjuk ett tag och har inte lagt märke till uppgfiten .

https://dl.dropboxusercontent.com/u/78075226/programmering/Bi...

Det står nu skall 7 stycken tal mellan 1-25 slumpas fram.

Int[] mina_tal = new int [10]

mina_tal [0] = 20;
mina_tal [1] = 8;
mina_tal [2] = 4 ;
mina_tal [3] = 17;
mina_tal [4] = 23;
mina_tal [5] = 2;
mina_tal [6] = 9;
mina_tal [7] =14;
mina_tal [8] = 7;
mina_tal [9] = 12;
mina_tal [10] = 7;
int.parse console.Readline());

en så länge har jag skrivit detta men , jag förstår inte om hur 1-25 skall slumpas fram

Du skulle göra mig väldigt glad genom att hjälpa mig med detta

Permalänk
Medlem
Skrivet av furkishhh:

@Pamudas:

Du har fullständigt rätt, jag vart sjuk ett tag och har inte lagt märke till uppgfiten .

https://dl.dropboxusercontent.com/u/78075226/programmering/Bi...

Det står nu skall 7 stycken tal mellan 1-25 slumpas fram.

Int[] mina_tal = new int [10]

mina_tal [0] = 20;
mina_tal [1] = 8;
mina_tal [2] = 4 ;
mina_tal [3] = 17;
mina_tal [4] = 23;
mina_tal [5] = 2;
mina_tal [6] = 9;
mina_tal [7] =14;
mina_tal [8] = 7;
mina_tal [9] = 12;
mina_tal [10] = 7;
int.parse console.Readline());

en så länge har jag skrivit detta men , jag förstår inte om hur 1-25 skall slumpas fram

Du skulle göra mig väldigt glad genom att hjälpa mig med detta

Antar att det är C#?
Prova använda Random-klassen.

using System.Random; Random rand = new Random(); // Skapar ett nytt Random-objekt. rand.Next(1, 25); // Slumpar ett tal mellan 1 och 25.

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk

Tack man

@Pamudas:

Jag tackar dig <3

Permalänk
Medlem
Skrivet av furkishhh:

@Pamudas:

Jag tackar dig <3

Inga problem, se nu till att få A på den där uppgiften nu

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Medlem

Ska det inte vara rand.Next(1, 26); om jag minns rätt.

Permalänk
Medlem
Skrivet av Snorren:

Ska det inte vara rand.Next(1, 26); om jag minns rätt.

Ger inte det ett tall från 1 till och med 26? Precis som man skriver 1 istället för 0?
*EDIT*
Du har helt rätt. Det övre är endast en gräns, det är TILL och inte TILL OCH MED.
Så det beror väl på hur läraren tycker det ska vara, om 25 är medräknat eller ej

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Medlem

https://msdn.microsoft.com/en-us/library/2dx6wyd4%28v=vs.110%...

Return Value
Type: System.Int32

A 32-bit signed integer greater than or equal to minValue and less than maxValue; that is, the range of return values includes minValue but not maxValue.

http://www.dotnetperls.com/random