c#, Changing program to linear search - c#

I made this code a couple of days ago and have a pretty simple question. I know questions like this have been asked, but I couldn't find anything that specifically works for my case. I want to change the search function in case 3 to a less complex search method, so I basically want to replace it with linear search. If that is not possible I want to implement the linear search somewhere else. You guys have any clues? All help is appreciated.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Loggbok
{
class MainClass
{
public static void Main(string[] args)
{
DateTime tiden = DateTime.UtcNow;//Skriver ut tiden vid varje inlägg
bool running = true;//Ger ett booleskt värde till variabeln running för att kunna skapa en loop
List<string[]> loggbok = new List<string[]>();//Här skapas listan som innehåller arrayen
while (running)//Här skapas loopen
{
Console.WriteLine("\n************************************");
Console.WriteLine("\nVälkommen till loggboken!");
Console.WriteLine("\n************************************");
Console.WriteLine("\n[1] Skriv nytt inlägg i loggboken");
Console.WriteLine("[2] Skriv ut alla loggar");
Console.WriteLine("[3] Sök inlägg i loggboken");
Console.WriteLine("[4] Radera innehåll i loggboken");
Console.WriteLine("[5] Avsluta loggboken");
Console.WriteLine("\n************************************");
Console.Write("\nVälj: ");
int option;//Int eftersom valet ska vara ett heltal
try
{
option = Int32.Parse(Console.ReadLine());//testar så att inmatningen är av typen Int
}
catch
{
Console.WriteLine("Fel, du får bara skriva in nummer");//Felmeddelande om inmatningen är en bokstav
continue;
}
switch (option)
{
case 1:
string[] logg = new string[2];//Här deklareras arrayen
Console.WriteLine("\n************************************");
Console.WriteLine(tiden);
Console.WriteLine("Ange en Titel:");
logg[0] = Console.ReadLine();//Här sparas titeln
Console.Clear();
Console.WriteLine("\n************************************");
Console.WriteLine("Skriv inlägg:");
logg[1] = String.Format("{0}{1}{2}", Console.ReadLine(), Environment.NewLine, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//Här sparas inlägget samt datum och tid, detta är möjligt tack vare formattering
loggbok.Add(logg);
break;
case 2:
foreach (string[] item in loggbok)//För att skriva ut alla items i loggboken
{
Console.WriteLine("\n--------------------------------------\n ");
Console.WriteLine(item[0]);//För att skriva ut titel
Console.WriteLine(item[1]);//För att skriva ut inlägg
Console.WriteLine("\n--------------------------------------\n ");
}
Console.ReadLine();
break;
case 3:
Console.WriteLine("\n************************************");
Console.WriteLine("Skriv in ett ord du vill söka efter i loggboken:");
var nyckelord = Console.ReadLine();//Här sparas inmatningen av nyckelordet
var entries = loggbok.Where(entry => entry.Any(item =>item.IndexOf(nyckelord, StringComparison.OrdinalIgnoreCase) > -1));//För att kontrollera om nyckelordet finns samt ignorera skiftlägeskänslighet, och finna både titel och inlägg
foreach (var entry in entries)//för att finna alla inlägg/titlar som matchar nyckelord
{
Console.WriteLine("\n--------------------------------------\n ");
Console.WriteLine(string.Join(", ", entry));//Skriver ut titel samt inlägg som matchat nyckelordet
Console.WriteLine("\n--------------------------------------\n ");
}
if (entries.Count() == 0)//Om ingen matchning hittas
{
Console.WriteLine("\n--------------------------------------\n ");
Console.Write("Din sökning misslyckades...");//Felmeddelande om ingen matchning hittas
Console.WriteLine("\n--------------------------------------\n ");
}
break;
case 4:
Console.WriteLine("\n************************************");
Console.WriteLine("Skriv titeln på det inlägg du vill ta bort:");
string title = Console.ReadLine();//Sparar titeln på inlägget användaren vill radera
for (int x = 0; x < loggbok.Count; x++) //Loopa igenom varje titel
{
if (String.Equals(loggbok[x][0], title, StringComparison.OrdinalIgnoreCase)) //Icke skiftlägeskänslig matchning av titeln.
{
loggbok.RemoveAt(x); //Matchning funnen.
}
else
{
Console.WriteLine("Titeln finns inte, återgår till huvudmenyn");
}
}
break; //Avsluta loopen.
case 5:
running = false;//Avslutar loopen och därmed programmet
break;
default:
Console.WriteLine("Nu blev det fel, välj mellan [1] [2] [3] [4] [5]");//Felmeddelande om valet är någon annan siffra än de som menyn innehåller
break;
}
}
}
}
}

Your keyword search in case 3 is already linear. Are you just trying to make the search statement less verbose inside the switch? Then turn the search expression into a function:
static IEnumerable<string[]> SearchByKeyword(IEnumerable<string[]> loggbok,
string nyckelord) {
return loggbok.Where(entry => entry
.Any(item => item.IndexOf(nyckelord,
StringComparison.OrdinalIgnoreCase) > -1));
}
and invoke it in the switch statement:
var entries = SearchByKeyword(loggbok, nyckelord);

Related

Why are my vectors being reset instead of having their own value?

I'm studying programing right now and I need to make a "bus". I've got a vector with 25 spots and user will fill these with passengers. I've got a switch-case menu so you can choose if you want to add a passenger or get the full passenger list and so on. When I've entered about 5 passengers and want to get the passenger list everyone on the bus turns to 0 instead of the age I entered. I have no idea what's wrong?
Comments in the code are in Swedish.
{
class Buss
{
public int[] passagerare;
public int antal_passagerare ;
public void Run()
{
Console.WriteLine("Welcome to the awesome Buss-simulator");
do
{
Console.WriteLine("Välj alternativ");
Console.WriteLine("1: Lägg till passagerare");
Console.WriteLine("2: Skriv ut listan över passagerare");
Console.WriteLine("3: Skriv ut total åldern över passagerna");
Console.WriteLine("4: Skriv ut medelåldern över passagerarna");
Console.WriteLine("0: Avsluta programmet.");
string str = Console.ReadLine();
int temp = Convert.ToInt32(str);
switch (temp)
{
case 1:
Console.WriteLine("Lägg till passagerare (ange ålder endast)!");
add_passenger();
break;
case 2:
Console.WriteLine("Skriv ut gästlistan!");
print_buss();
break;
case 3:
Console.WriteLine("hejsan");
break;
case 4:
Console.WriteLine("hejsan");
break;
case 0:
Console.WriteLine("hejsan");
break;
}
//ska ändra så att om man väljer 0 så stängs programmet
} while (true);
//Här ska menyn ligga för att göra saker
//Jag rekommenderar switch och case här
//I filmen nummer 1 för slutprojektet så skapar jag en meny på detta sätt.
//Dessutom visar jag hur man anropar metoderna nedan via menyn
//Börja nu med att köra koden för att se att det fungerar innan ni sätter igång med menyn.
//Bygg sedan steg-för-steg och testkör koden.
}
//Metoder för betyget E
public void add_passenger()
{
passagerare = new int[25];
if (antal_passagerare < 25)
{
Console.WriteLine("Ålder på passagerare nr " + antal_passagerare);
string age = Console.ReadLine();
int age2 = Convert.ToInt32(age);
passagerare[antal_passagerare] = age2;
Console.WriteLine(passagerare[antal_passagerare]);
antal_passagerare++;
}
else
{
Console.WriteLine("Bussen är full!");
}
//Lägg till passagerare. Här skriver man då in ålder men eventuell annan information.
//Om bussen är full kan inte någon passagerare stiga på
}
public void print_buss()
{
for (int i = 0; i < antal_passagerare; i++)
{
Console.WriteLine(passagerare[i]);
}
}
// public int calc_total_age()
//{
//}
//public int calc_average_age()
//{
//}
public void find_age()
{
}
public void sort_buss()
{
}
}
class Program
{
public static void Main(string[] args)
{
var minbuss = new Buss();
minbuss.Run();
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
If I am understanding this correctly, you are setting the array:
passagerare = new int[25];
to a new array every time you get into the add_passenger function so altthough you may actually set it the first time, the next time the user gets into the function, it'll be reset again.
If this is the case, the you can simply define it before you call this function and pass it as a parameter.
EDIT: In regards to your comment, you can define it in one of two palces.
1) You can create a constructor that sets the array to a length of [25] such as:
public Buss(){
passagerare = new int[25];
}
2) You can define it before you enter your switch statement and pass the array into to each function as a parameter.

How to replace while with do-while in this code?

Is there any easy way to add "do" to this program? Need to have one "do" in my assignment :)
namespace Uppgift_1___Gissa_talet
{
class Program
{
static void Main(string[] args)
{
Random randomerare = new Random();
int slump_tal = randomerare.Next(1, 101);
Console.WriteLine("Minigame: Gissa talet!");
Console.WriteLine();
Console.WriteLine("Skriv in ett tal mellan 1 och 100:");
string str = Console.ReadLine();
int tal = Convert.ToInt32(str);
while (tal != slump_tal)
{
if (tal < slump_tal) //Är det mindre?
{
Console.WriteLine("Fel! Större!");//Säg då att det ska vara större
}
else if (tal > slump_tal)
{
Console.WriteLine("Fel! Mindre!");
}
tal = Convert.ToInt32(Console.ReadLine());//Läs in nästa gissning
}
Console.WriteLine("Grattis! Du gissade rätt!");
Console.WriteLine("Tryck på en tangent för att avsluta...");
Console.ReadLine();
}
}
}
namespace Uppgift_1___Gissa_talet
{
class Program
{
static void Main(string[] args)
{
Random randomerare = new Random();
int slump_tal = randomerare.Next(1, 101);
Console.WriteLine("Minigame: Gissa talet!");
Console.WriteLine();
Console.WriteLine("Skriv in ett tal mellan 1 och 100:");
string str = Console.ReadLine();
int tal = Convert.ToInt32(str);
do //You start the loop before the test expression is checked
{
if (tal < slump_tal) //Är det mindre?
{
Console.WriteLine("Fel! Större!");//Säg då att det ska vara större
}
else if (tal > slump_tal)
{
Console.WriteLine("Fel! Mindre!");
}
tal = Convert.ToInt32(Console.ReadLine());//Läs in nästa gissning
}while(tal != slump_tal); // The test expression is checked here.
Console.WriteLine("Grattis! Du gissade rätt!");
Console.WriteLine("Tryck på en tangent för att avsluta...");
Console.ReadLine();
}
}
}
All you have to do is move the while to the end of the block (followed by a semi-colon) and add a do to the beginning of the block.
Additionally, this allows you to move the user input completely inside the loop instead of having it written twice. The only catch is that tal must be defined outside the loop since it's used in the while condition:
private static void Main(string[] args)
{
int slump_tal = new Random().Next(1, 101);
int tal;
Console.WriteLine("Minigame: Gissa talet!\n");
Console.WriteLine("Skriv in ett tal mellan 1 och 100:");
do
{
tal = Convert.ToInt32(Console.ReadLine());
if (tal < slump_tal)
{
Console.WriteLine("Fel! Större!");
}
else if (tal > slump_tal)
{
Console.WriteLine("Fel! Mindre!");
}
} while (tal != slump_tal);
Console.WriteLine("Grattis! Du gissade rätt!");
Console.WriteLine("Tryck på en tangent för att avsluta...");
Console.ReadLine();
GetKeyFromUser("\nDone! Press any key to exit...");
}
Another improvement you could make is to include a helper method that validates that the user input is actually a number, so that you don't throw an exception if they enter something like "two" instead of "2". The following method takes in a "prompt" string (the question for the user), and makes use of a loop where the condition uses int.TryParse to validate that the entry is an integer, and it continues to loop until it returns true, then returns the integer entered by the user:
private static int GetIntFromUser(string prompt)
{
int input;
do
{
Console.Write(prompt);
} while (!int.TryParse(Console.ReadLine(), out input));
return input;
}
Now we can make use of this method to get the user input:
private static void Main(string[] args)
{
int slump_tal = new Random().Next(1, 101);
int tal;
var prompt = "Skriv in ett tal mellan 1 och 100: ";
Console.WriteLine("Minigame: Gissa talet!\n");
do
{
tal = GetIntFromUser(prompt);
prompt = tal < slump_tal
? "Fel! Det numret är för litet. Försök igen: "
: "Fel! Det numret är för stort. Försök igen: ";
} while (tal != slump_tal);
Console.WriteLine("Grattis! Du gissade rätt!");
Console.WriteLine("Tryck på valfri tangent för att avsluta...");
Console.ReadLine();
}

Linear search after assigning variables [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 3 years ago.
Improve this question
I have been making a program that has been working. But now i want to change the search function of the program to something simpler. This is what I have done: and the error message is use of unassigned local variable logg. To be clear, this is how I want the search function to look. Now I just need to figure out the variable thing.
full code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Loggbok
{
class MainClass
{
public static void Main(string[] args)
{
DateTime tiden = DateTime.UtcNow; //Skriver ut tiden vid varje inlägg
bool running = true; //Ger ett booleskt värde till variabeln running för att kunna skapa en loop
List<string[]> loggbok = new List<string[]>(); //Här skapas listan som innehåller arrayen
while (running) //Här skapas loopen
{
Console.WriteLine("\n************************************");
Console.WriteLine("\nVälkommen till loggboken!");
Console.WriteLine("\n************************************");
Console.WriteLine("\n[1] Skriv nytt inlägg i loggboken");
Console.WriteLine("[2] Skriv ut alla loggar");
Console.WriteLine("[3] Sök inlägg i loggboken");
Console.WriteLine("[4] Radera innehåll i loggboken");
Console.WriteLine("[5] Avsluta loggboken");
Console.WriteLine("\n************************************");
Console.Write("\nVälj: ");
int option; //Int eftersom valet ska vara ett heltal
try
{
option = Int32.Parse(Console.ReadLine()); //testar så att inmatningen är av typen Int
}
catch
{
Console.WriteLine("Fel, du får bara skriva in nummer"); //Felmeddelande om inmatningen är en bokstav
continue;
}
switch (option)
{
case 1:
string[] logg = new string[2]; //Här deklareras arrayen
Console.WriteLine("\n************************************");
Console.WriteLine(tiden);
Console.WriteLine("Ange en Titel:");
logg[0] = Console.ReadLine(); //Här sparas titeln
Console.Clear();
Console.WriteLine("\n************************************");
Console.WriteLine("Skriv inlägg:");
logg[1] = String.Format("{0}{1}{2}", Console.ReadLine(), Environment.NewLine,
DateTime.Now.ToString(
"yyyy-MM-dd HH:mm:ss")); //Här sparas inlägget samt datum och tid, detta är möjligt tack vare formattering
loggbok.Add(logg);
break;
case 2:
foreach (string[] item in loggbok) //För att skriva ut alla items i loggboken
{
Console.WriteLine("\n--------------------------------------\n ");
Console.WriteLine(item[0]); //För att skriva ut titel
Console.WriteLine(item[1]); //För att skriva ut inlägg
Console.WriteLine("\n--------------------------------------\n ");
}
Console.ReadLine();
break;
case 3:
Console.WriteLine("\n************************************");
Console.WriteLine("Skriv in ett ord du vill söka efter i loggboken:");
string nyckelord = Console.ReadLine(); //Här sparas inmatningen av nyckelordet
for (int i = 0; i < logg.Length; i++)
{
if (logg[i] == nyckelord)
{
Console.WriteLine(logg[0]);
Console.WriteLine(logg[1]);
}
else
{
Console.WriteLine("Finns ej");
}
}
break;
case 4:
Console.WriteLine("\n************************************");
Console.WriteLine("Skriv titeln på det inlägg du vill ta bort:");
string title = Console.ReadLine(); //Sparar titeln på inlägget användaren vill radera
for (int x = 0; x < loggbok.Count; x++) //Loopa igenom varje titel
{
if (String.Equals(loggbok[x][0], title, StringComparison.OrdinalIgnoreCase)
) //Icke skiftlägeskänslig matchning av titeln.
{
loggbok.RemoveAt(x); //Matchning funnen.
}
else
{
Console.WriteLine("Titeln finns inte, återgår till huvudmenyn");
}
}
break; //Avsluta loopen.
case 5:
running = false; //Avslutar loopen och därmed programmet
break;
default:
Console.WriteLine(
"Nu blev det fel, välj mellan [1] [2] [3] [4] [5]"); //Felmeddelande om valet är någon annan siffra än de som menyn innehåller
break;
}
}
}
}
}
This is what I have done: and the error message is use of unassigned
local variable logg
all local variables must be assigned before control leaves the containing method.
It is declared in case 1
remove the string[] logg = new string[2]; from case 1 and insert it before the opening try block otherwise you won't be able to use the array throughout the other cases.
string[] logg = new string[2];//Här deklareras arrayen
try
{
option = Int32.Parse(Console.ReadLine());//testar så att inmatningen är av typen Int
}
...
...
...
Your question is not clear and should be improved.
Assuming the code is given exactly as it is, then you are using break out of a loop or switch block.
Correct and check if you still have problems.

Add user input to Array in steps C#?

I've got a task in school saying that I'm supposed to create a program similar to a backpack where I'm supposed to use an array and a list.
Function of the backpack is to be able to put 4 objects into the smaller compartment (ytterfack) and then put unlimited amount of objects into the large compartment (stora facket).
I'd like it to work with a menu where the user can put one item into the (ytterfack) and if the user want to, switch over to the (stora fack) and put an item into that one. That is, I'm trying to avoid having a for-loop for the (ytterfack) which would mean that the user get the choice of puttin 4 objects strait away into the (ytterfack).
Is there a way to create an array and let the user put the elements inside one at a time and even get a message out when it's full?
class Program
{
static void Main(string[] args)
{
Console.WriteLine("\tVälkommen till Ryggsäcken!!\n");
Console.WriteLine("\t[1] Lägg till ett föremål i det stora facket");
Console.WriteLine("\t[2] Lägg till ett föremål i ytterfacket");
Console.WriteLine("\t[3] Skriv ut innehållet i stora facket");
Console.WriteLine("\t[4] Skriv ut innehållet i ytterfacket");
Console.WriteLine("\t[5] Rensa innehållet i stora facket");
Console.WriteLine("\t[6] Rensa innehållet i ytterfacket");
Console.WriteLine("\t[7] Avsluta\n");
string[] ytterFack = new string[4];
List<string> storaFacket = new List<string> { };
int i = 0;
bool kör = true;
do
{
Console.Write("\n\tVälj punkt från menyn: ");
int menyVal = Convert.ToInt32(Console.ReadLine());
switch (menyVal)
{
case 1:
Console.Write("\n\tSkriv in ett föremål: ");
storaFacket.Add(Console.ReadLine());
//Console.WriteLine("\n\tDu har lagt in " + + " Tack!\n");
break;
case 2:
Console.Write("\n\tSkriv in ett föremål: ");
ytterFack[i] = Console.ReadLine();
//Console.WriteLine("\n\tDu har lagt in " + ytterFack[i] + " Tack!\n");
break;
case 3:
Console.WriteLine("\tInnehållet i stora facket är:");
foreach (string item in storaFacket)
{
Console.WriteLine("\t" + item);
}
break;
case 4:
Console.WriteLine("\tInnehållet i ytterfacket är:");
foreach (string item in ytterFack)
{
Console.WriteLine("\t" + item);
}
break;
case 5:
storaFacket.Clear();
Console.WriteLine("\tNu är stora facket tömt!\n");
break;
case 6:
Array.Clear(ytterFack, 0, ytterFack.Length);
Console.WriteLine("\tNu är ytterfacket tömt!\n");
break;
case 7:
kör = false;
break;
default:
break;
}
}
while (kör);
}
}
Instead of doing everything in Main(), start by modeling your BackPack as a separate class - this way you can implement and apply the constraints (like 4 items max) consistently, even if you use a List<string> for both:
public class BackPack
{
private List<string> ytterFacket = new List<string>();
public List<string> YtterFacket
{
get {
return ytterFacket;
}
}
private List<string> storaFacket = new List<string>();
public List<string> StoraFacket
{
get {
return storaFacket;
}
}
public string PutIntoYtterFacket(string item)
{
if (ytterFacket.Count < 4)
{
ytterFacket.Add(item);
return string.Format("Du har lagt in {0}! Tack!", item);
}
return string.Format("Kan inte lägge till {0}, gräns nådd", item);
}
public string PutIntoStoraFacket(string item)
{
storaFacket.Add(item);
return string.Format("Du har lagt in {0}! Tack!", item);
}
public string ClearYtterFacket()
{
ytterFacket.Clear();
return "Nu är ytterfacket tömt!";
}
public string ClearStoraFacket()
{
storaFacket.Clear();
return "Nu är storafacket tömt!";
}
}
So the case of adding to ytterFacket becomes (assuming fjallraven is an instance of the BackPack class):
Console.Write("\n\tSkriv in ett föremål: ");
fjallraven.PutIntoYtterFacket(Console.ReadLine());
You don't have to do error handling in the case block, the BackPack instance will do it for you! (Sorry for the error strings, my Swedish is a bit rusty)
Ok, this is what it became.
I would appreciate a comment or two about it, what can I do better or in a easier way??
Console.WriteLine("\tVälkommen till Ryggsäcken!!\n");
Console.WriteLine("\t[1] Lägg till ett föremål i det stora facket");
Console.WriteLine("\t[2] Lägg till ett föremål i ytterfacket");
Console.WriteLine("\t[3] Skriv ut innehållet i stora facket");
Console.WriteLine("\t[4] Skriv ut innehållet i ytterfacket");
Console.WriteLine("\t[5] Rensa innehållet i stora facket");
Console.WriteLine("\t[6] Rensa innehållet i ytterfacket");
Console.WriteLine("\t[7] Avsluta\n");
string[] ytterFack = new string[4];
List<string> storaFacket = new List<string> { };
int i = 0;
bool kör = true;
do
{
Console.Write("\n\tVälj punkt från menyn: ");
try
{
int menyVal = Convert.ToInt32(Console.ReadLine());
switch (menyVal)
{
case 1:
Console.Write("\n\tSkriv in ett föremål: ");
storaFacket.Add(Console.ReadLine());
//Console.WriteLine("\n\tDu har lagt in " + + " Tack!\n");
break;
case 2:
Console.Write("\n\tSkriv in ett föremål: ");
if (ytterFack[0] == null)
{
ytterFack[0] = Console.ReadLine();
break;
}
else if (ytterFack[1] == null)
{
ytterFack[1] = Console.ReadLine();
break;
}
else if (ytterFack[2] == null)
{
ytterFack[2] = Console.ReadLine();
break;
}
else if (ytterFack[3] == null)
{
ytterFack[3] = Console.ReadLine();
break;
}
else
{
Console.WriteLine("\n\tFacket är fullt och måste tömmas innan du kan lägga ner föremål här.");
break;
}
break;
case 3:
Console.WriteLine("\n\tInnehållet i stora facket är:\n");
foreach (string item in storaFacket)
{
Console.WriteLine("\t" + item);
}
break;
case 4:
Console.WriteLine("\n\tInnehållet i ytterfacket är:\n");
foreach (string item in ytterFack)
{
Console.WriteLine("\t" + item);
}
break;
case 5:
storaFacket.Clear();
Console.WriteLine("\n\tNu är stora facket tömt!\n");
break;
case 6:
Array.Clear(ytterFack, 0, ytterFack.Length);
Console.WriteLine("\n\tNu är ytterfacket tömt!\n");
break;
case 7:
kör = false;
break;
default:
Console.WriteLine("\n\tDu måste välja från menyn, [1] - [7]");
break;
}
}
catch
{
Console.WriteLine("\n\tDu kan bara mata in ett val (en siffra) från menyn!");
}
}
while (kör);
}

Need help hangman c#

When I try to run, it says:
System.Collections.Generic.List' does not contain a definition for 'Length' and no extension method 'Length' accepting a first argument of type 'System.Collections.Generic.List' could be found (are u missing a using directive or an assembly reference?)
This points to the code written in case '3'. I've used google and tried reading in the book, but I cant seem to find a solution.
static void Main (string[] args)
{
char meny;// För att kunna göra menyval.
string s;// Ordet som spelaren kommer skriva in.
List<string> dinaord = new List<string> { "Varg", "Apor", "Besvärad", "Människor", "Komplettering" };// Array för spelarens ord, samt mina egna.
bool visameny = true; // visameny blir tilldelat true.
Console.WriteLine("\n\t\tHejsan, och välkommen till Hänga Gumma!");
do// Återvänder till menyn så länge den är true.
{
Console.WriteLine("\n\n 1) Lägga till ord");
Console.WriteLine("\n 2) Lista alla ord");
Console.WriteLine("\n 3) Spela");
Console.WriteLine("\n 4) Avsluta");// Visar 1-4, samt vad varje nummer leder till.
Console.WriteLine("\n\n Välj 1-4");
meny = Convert.ToChar(Console.ReadLine());// Konverterar det spelaren väljer till "meny".
switch (meny)// Switchen börjar.
{
case '1':
Console.Write("\nLägg till ord:");
dinaord.Add(Console.ReadLine());// Låter spelaren slå in ord och sparar dem i en array. Ändrade till en Console.ReadLine.
break;
case '2':// Mina egna ord.
dinaord.Sort();// Flyttade sorteringen hit, för att få den till att sortera orden när man trycker två.
Console.Write("\nHär visas dina ord!\n");
int i = 1;
foreach (string ord in dinaord)// Löste detta med hjälp av dina anvisningar att titta igenom kapitlet igen och försöka olika koder.
{
Console.Write(ord + " ");// Här visas spelarens ord, (om dem har lagt till några) samt mina egna ord.
}
break;
case '3':// Här ska spelet starta.
int antalchanser;// antalchanser görs om till en int för att senare jämföras.
int felgissningar = 0;// felgissningar görs om en till en int, och får värdet 0, för att senare jämföras med antalchanser och kommer att leda till att spelet avslutas om felgissningar blir lika med antalchanser.
Console.Write("\nHur många fel får man ha?");
antalchanser = Convert.ToInt32(Console.ReadLine());// Gör så att det spelaren skriver in blir till "antalchanser".
Console.Write("\nFelgissningar:0/" + antalchanser);// Visar antal felgissningar.
Console.Write("\nGissa ett ord:");
s = Convert.ToString(Console.ReadLine());// Ordet som ska sökas efter.
int o;
for (o = 0; o < dinaord.Length; o++)// Söker igenom arrayn dinaord och jämförs med det spelaren har skrivit in.
if (dinaord[o] == s)
{
Console.WriteLine("\nGrattis du gissa rätt!" + dinaord[o] +
" var det hemliga ordet ");
break;// Bryter satsen om dem gissar rätt.
}
if (o == dinaord.Length)
{
Console.WriteLine("\nDu gissa fel!");
felgissningar++;// Lägger till +1 på felgissningar om dem gissar fel.
}
if (felgissningar == antalchanser)// Jämför felgissningar med antalchanser.
{
Console.WriteLine("\nDu har inga chanser kvar! Tack för att du spelade Michaels ofulländade version!");
visameny = false;// visameny blir false, avbryter spelet om antalchanser tar slut.
}
if (felgissningar != antalchanser)// Kollar om felgissningar inte är lika med antalchanser.
{
Console.WriteLine("\nGissa igen:");
}
break;
case '4':
{
Console.WriteLine("\nSpelet avslutas!");
Console.WriteLine("\nTack för att du spelade Michael´s ofulländade version!");
visameny = false;// visameny blir false, avbryter spelet.
}
break;
default:// Ifall annat än 1-4 knappas in, visas detta.
Console.WriteLine("\n\tDu får inte trycka på den!" +
"\n\tAnvänd bara det som står på skärmen: 1-4");
break;
}// Switchen slutar.
} while (visameny == true);// Fortsätter loopen så länge den är true.
}
}
}
A List is not an array. Native arrays (string[]) have a Length property, but a List<T> has a Count property. So you just need:
for (o = 0; o < dinaord.Count; o++)
Guess you are looking for dinoard.Count instead of length. Also you can use foreach like in case '2', which you seem to be comfortable with.

Categories