• 1
  • 2
2017-05-10, 13:07
  #1
Medlem
IIMorbiids avatar
Hej, har en uppgift att göra som jag ska lämna in, uppgiften är att göra en loggbok med hjälp av en array och en lista.

Har lyckats göra allting förutom sökfunktionen. Man ska kunna söka upp ett inlägg med hjälp av att skriva in ett sökord (en del av titeln) och programmet ska sedan skriva ut det inlägget.

Jag får det verkligen inte att fungera, har tittat på instruktionsvideon som läraren gjort men om jag gör så som han skrivit så blir det bara blankt och när jag trycker enter ett par gånger så hoppar den ett par rader sen skickar den tillbaka mig till menyn, förstår inte riktigt vad som är felet .. Någon som hade kunnat vägleda mig i rätt riktning? Tack på förhand!

Det är i case 2 sökfunktionen ligger, och för nuvarande har jag lagt in koden som läraren gjort i videon, utan framgång ..

Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 
Menu
{
    class 
Program
    
{
        static 
void Main(string[] args)
        {
            List<
stringlogBook = new List<string> ();

            
int entries 2;

            
string[] entry = new string[entries];
            
entry[0] = "title";
            
entry[1] = "post";
        

            
bool active true;
            while (
active)
                try
                {
                    {
                        
Console.Clear();
                        
Console.WriteLine("Welcome!");

                        
Console.WriteLine("\n[1] Write new entry.");
                        
Console.WriteLine("[2] Search entry.");
                        
Console.WriteLine("[3] Print all entries.");
                        
Console.WriteLine("[4] Exit.");

                        
Console.Write("\nChoose: ");

                        
int menyVal Convert.ToInt32(Console.ReadLine());


                        switch (
menyVal)
                        {
                            case 
1:

                                
Console.Clear();
                                
Console.WriteLine("Enter a title: ");
                                
entry[0] = Console.ReadLine();
                                
Console.Clear();
                                
Console.WriteLine("Write your entry: ");
                                
entry[1] = Console.ReadLine();
                                
Console.Clear();

                                
logBook.Add(entry[0]);
                                
logBook.Add(entry[1]);

                                break;

                            case 
2:
                                
Console.WriteLine("Enter part of title:");
                                
string keyword Console.ReadLine();

                                for (
int i 0entry.Lengthi++)
                                {
                                    if (
entry[i] == keyword)
                                        
Console.WriteLine(entry[i]);
                                        
Console.ReadLine();
                                }
                                break;

                            case 
3:
                                
Console.Clear();
                                
Console.WriteLine("These are the entries in your log:\n ");
                                foreach (
string item in logBook)
                                {

                                    
Console.WriteLine(item);

                                }

                                
Console.Write("\nPress enter to continue.\n");
                                
Console.ReadKey();
                                break;

                            default:
                                
Console.Write("Make a choice.");
                                break;

                            case 
4:
                                return;

                        }

                    }
                }

                catch
                {
                    
Console.Clear();
                    
Console.WriteLine("Something went wrong, try again.");
                    
Console.Write("\nPress enter to continue.\n");
                    
Console.ReadLine();
                }

        }
    }

Citera
2017-05-10, 13:19
  #2
Medlem
Kod:
if (entry[i] == keyword) 

Där kollar du ju bara ifall hela ordet stämmer med din sökning. Dvs "title" skulle bara matcha med "title", medan "titl" inte skulle matcha med "title".

http://stackoverflow.com/questions/1...g-with-c-sharp kan nog leda dig på rätt spår.
Citera
2017-05-10, 13:35
  #3
Medlem
IIMorbiids avatar
Citat:
Ursprungligen postat av Quet
Kod:
if (entry[i] == keyword) 

Där kollar du ju bara ifall hela ordet stämmer med din sökning. Dvs "title" skulle bara matcha med "title", medan "titl" inte skulle matcha med "title".

http://stackoverflow.com/questions/1...g-with-c-sharp kan nog leda dig på rätt spår.

Det är helt okej om det gör det, men det fungerar inte ens även om jag skriver in hela ordet..
Citera
2017-05-10, 14:06
  #4
Medlem
Fungerar härifrån iallafall

Welcome!

[1] Write new entry.
[2] Search entry.
[3] Print all entries.
[4] Exit.

Choose: 2
Enter part of title:
title <-Input
title <-Output
Citera
2017-05-10, 14:34
  #5
Medlem
IIMorbiids avatar
Citat:
Ursprungligen postat av Quet
Fungerar härifrån iallafall

Welcome!

[1] Write new entry.
[2] Search entry.
[3] Print all entries.
[4] Exit.

Choose: 2
Enter part of title:
title <-Input
title <-Output

Gjorde en GIF utav det, såhär blir det för mig.

Har skrivit in ett antal test loggar i början av gifen, så ser du att jag tar "nummertre" och söker sedan på den!

https://gyazo.com/f829f2d1aa5834ef47fd6079efb92111

Det blir blankt sen trycker jag enter två gånger och kommer tillbaka till menyn ..
Citera
2017-05-10, 14:41
  #6
Medlem
Ah okej hittade felet.

Kod:
 for (int i = 0; i < entry.Length; i++) 
{ 
 if (entry[i] == keyword) 
 Console.WriteLine(entry[i]); 
Console.ReadLine(); 
} 
break; 

här jämför du index 0 med ditt keyword, ifall det stämmer så skriver du ut entry 0, men ifall det inte är sant så väntar du på userinput

gör istället:

Kod:
 for (int i = 0; i < entry.Length; i++) 
{ 
if (entry[i] == keyword) 
 Console.WriteLine(entry[i]); 
  } 
 Console.ReadLine(); 
 break; 
Citera
2017-05-10, 14:47
  #7
Medlem
IIMorbiids avatar
Citat:
Ursprungligen postat av Quet
Ah okej hittade felet.

Kod:
 for (int i = 0; i < entry.Length; i++) 
{ 
 if (entry[i] == keyword) 
 Console.WriteLine(entry[i]); 
Console.ReadLine(); 
} 
break; 

här jämför du index 0 med ditt keyword, ifall det stämmer så skriver du ut entry 0, men ifall det inte är sant så väntar du på userinput

gör istället:

Kod:
 for (int i = 0; i < entry.Length; i++) 
{ 
if (entry[i] == keyword) 
 Console.WriteLine(entry[i]); 
  } 
 Console.ReadLine(); 
 break; 

Fortfarande samma svar som på gifen, jävligt konstigt tycker jag..
Citera
2017-05-10, 14:48
  #8
Medlem
Citat:
Ursprungligen postat av IIMorbiid
Fortfarande samma svar som på gifen, jävligt konstigt tycker jag..

Posta exakt hur din kod ser ut nu då
Citera
2017-05-10, 15:15
  #9
Medlem
IIMorbiids avatar
Citat:
Ursprungligen postat av Quet
Posta exakt hur din kod ser ut nu då

Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 
Menu
{
    class 
Program
    
{
        static 
void Main(string[] args)
        {
            List<
stringlogBook = new List<string> ();

            
int entries 2;

            
string[] entry = new string[entries];
            
entry[0] = "title";
            
entry[1] = "post";
        

            
bool active true;
            while (
active)
                try
                {
                    {
                        
Console.Clear();
                        
Console.WriteLine("Welcome!");

                        
Console.WriteLine("\n[1] Write new entry.");
                        
Console.WriteLine("[2] Search entry.");
                        
Console.WriteLine("[3] Print all entries.");
                        
Console.WriteLine("[4] Exit.");

                        
Console.Write("\nChoose: ");

                        
int menyVal Convert.ToInt32(Console.ReadLine());


                        switch (
menyVal)
                        {
                            case 
1:

                                
Console.Clear();
                                
Console.WriteLine("Enter a title: ");
                                
entry[0] = Console.ReadLine();
                                
Console.Clear();
                                
Console.WriteLine("Write your entry: ");
                                
entry[1] = Console.ReadLine();
                                
Console.Clear();

                                
logBook.Add(entry[0]);
                                
logBook.Add(entry[1]);

                                break;

                            case 
2:
                                
Console.WriteLine("Enter part of title:");
                                
string keyword Console.ReadLine();

                                for (
int i 0entry.Lengthi++)
                                {
                                    if (
entry[i] == keyword)
                                        
Console.WriteLine(entry[i]);
                                }
                                
Console.ReadLine();
                                break;

                            case 
3:
                                
Console.Clear();
                                
Console.WriteLine("These are the entries in your log:\n ");
                                foreach (
string item in logBook)
                                {

                                    
Console.WriteLine(item);

                                }

                                
Console.Write("\nPress enter to continue.\n");
                                
Console.ReadKey();
                                break;

                            default:
                                
Console.Write("Make a choice.");
                                break;

                            case 
4:
                                return;

                        }

                    }
                }

                catch
                {
                    
Console.Clear();
                    
Console.WriteLine("Something went wrong, try again.");
                    
Console.Write("\nPress enter to continue.\n");
                    
Console.ReadLine();
                }

        }
    }

Citera
2017-05-10, 15:33
  #10
Medlem
Citat:
Ursprungligen postat av IIMorbiid
Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 
Menu
{
    class 
Program
    
{
        static 
void Main(string[] args)
        {
            List<
stringlogBook = new List<string> ();

            
int entries 2;

            
string[] entry = new string[entries];
            
entry[0] = "title";
            
entry[1] = "post";
        

            
bool active true;
            while (
active)
                try
                {
                    {
                        
Console.Clear();
                        
Console.WriteLine("Welcome!");

                        
Console.WriteLine("\n[1] Write new entry.");
                        
Console.WriteLine("[2] Search entry.");
                        
Console.WriteLine("[3] Print all entries.");
                        
Console.WriteLine("[4] Exit.");

                        
Console.Write("\nChoose: ");

                        
int menyVal Convert.ToInt32(Console.ReadLine());


                        switch (
menyVal)
                        {
                            case 
1:

                                
Console.Clear();
                                
Console.WriteLine("Enter a title: ");
                                
entry[0] = Console.ReadLine();
                                
Console.Clear();
                                
Console.WriteLine("Write your entry: ");
                                
entry[1] = Console.ReadLine();
                                
Console.Clear();

                                
logBook.Add(entry[0]);
                                
logBook.Add(entry[1]);

                                break;

                            case 
2:
                                
Console.WriteLine("Enter part of title:");
                                
string keyword Console.ReadLine();

                                for (
int i 0entry.Lengthi++)
                                {
                                    if (
entry[i] == keyword)
                                        
Console.WriteLine(entry[i]);
                                }
                                
Console.ReadLine();
                                break;

                            case 
3:
                                
Console.Clear();
                                
Console.WriteLine("These are the entries in your log:\n ");
                                foreach (
string item in logBook)
                                {

                                    
Console.WriteLine(item);

                                }

                                
Console.Write("\nPress enter to continue.\n");
                                
Console.ReadKey();
                                break;

                            default:
                                
Console.Write("Make a choice.");
                                break;

                            case 
4:
                                return;

                        }

                    }
                }

                catch
                {
                    
Console.Clear();
                    
Console.WriteLine("Something went wrong, try again.");
                    
Console.Write("\nPress enter to continue.\n");
                    
Console.ReadLine();
                }

        }
    }


Fungerar som det ska för mig.
Citera
2017-05-10, 15:40
  #11
Medlem
IIMorbiids avatar
Citat:
Ursprungligen postat av Quet
Fungerar som det ska för mig.

Om jag bara skriver in 1 logginlägg och sedan söker på titeln så kommer titeln upp men ej inlägget, skriver jag in mer än 1 inlägg funkar det inte alls ..

Ska kolla vidare lite!
Citera
2017-05-10, 15:44
  #12
Medlem
I din for-loop så söker du endast igenom ditt senaste inlägg, detta då entry innehåller entry[0] och entry[1] som uppdateras i case 1. Du vill egentligen söka igenom din loggbok i din for-loop.

foreach(String s in logBook)
..
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

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

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in