Permalänk
Medlem

Skapa lista

Hej,

Jag har kört fast och behöver lite förklaring och tips på hur jag kan gå vidare i min kod.
Jag ska skapa en lista där man ska mata in fem namn och sedan ska de skrivas ut och även i omvänd ordning.
Bifogar här min kod och det jag kört fast på är hur jag ska få den att förstå att jag ska mata in fem namn och inte bara ett.
För just nu om jag matar in ett namn blir det det namnet som visas i 10 rader

{ Console.Write("Mata in ett namn: "); string namnInmatning = Console.ReadLine(); string i = namnInmatning; List<string> namn = new List<string>(); namn.Add(i); namn.Add(i); namn.Add(i); namn.Add(i); namn.Add(i); foreach (string namnet in namn) { Console.WriteLine(namnet); } Console.WriteLine("----------------------------------------"); namn.Reverse(); foreach (string namnet in namn) { Console.WriteLine(namnet); } Console.Read(); } }

Permalänk
Medlem

Hej,

När du postar kod på forumet använd kod-taggarna så blir det enklare att läsa:
[code]
// Din kod här...
[/code]
Så blir det såhär:

// Din kod här...

I övrigt är du ju på god väg, som du säger läser du endast in ett namn när du egentligen vill läsa in 5 namn, typ:

// Detta vill du göra 5 gånger istället för 1 Console.Write("Mata in ett namn: "); string namnInmatning = Console.ReadLine(); string i = namnInmatning; namn.Add(i);

För att göra detta kan en for-loop vara ett bra val. Tänk också på att du då måste definiera din lista före loopen.

Testa och se om du får till det!

Permalänk
Medlem

{ string namnen = ""; List<string> namn = new List<string>(); namn.Add(namnen); namn.Add(namnen); namn.Add(namnen); namn.Add(namnen); namn.Add(namnen); for (int i = 0; i < namn.Count; i++) { Console.Write("Mata in ett namn: "); string namnInmatning = Console.ReadLine(); } foreach (string namnet in namn) { Console.WriteLine(namnet); } Console.WriteLine("----------------------------------------"); namn.Reverse(); foreach (string namnet in namn) { Console.WriteLine(namnet); } Console.Read(); } }

Nu har jag kommit en bit och kan skriva ut fem namn men har nu kört fast igen på hur jag ska skriva ut den namn jag matat in i de två foreach looparna :/

Permalänk
Medlem

@emfos: Försök tänk i klartext vad det är du vill göra. Du ska alltså låta användaren mata in ett namn och detta ska läggas i en lista. Detta ska göras flera gånger. Alltså behöver du någon slags loop som omsluter ReadLine() och namn.Add() och eftersom du vet i förväg hur många gånger det ska ske så funkar en For-loop bra.

Du har gjort en loop men det som matas in med ReadLine() läggs aldrig till listan. I stället börjar du med att lägga fem tomma strängar till listan. Finns det någon anledning till detta?

Visa signatur

Idioter förbokar datorspel.

Permalänk
Medlem

for (int i = 0; i < namn.Count; i++) { Console.Write("Mata in ett namn: "); Console.ReadLine(); }

forloopen verkar fungera som den ska för tillfället.
nu är problemet hur jag ska få namnen att läsas upp av foreach looparna.

Permalänk
Medlem
Skrivet av emfos:

for (int i = 0; i < namn.Count; i++) { Console.Write("Mata in ett namn: "); Console.ReadLine(); namn.Add(namnen); }

problemet nu är att loopen fortsätter snurra i oändlighet, antar detta är för att namn.Add() finns inuti själva loopen.

Ja. Du har satt loopen till att rulla så länge i är mindre än längden på listan, och listan ökas hela tiden. Använd i < 5 i stället eftersom du vet att du vill köra loopen fem gånger.

Namnet som matas in läggs för övrigt inte till listan nu heller. Något läggs till listan men inte det som ska läggas till.

Visa signatur

Idioter förbokar datorspel.

Permalänk
Medlem

Jag löste det!

Permalänk
Medlem
Skrivet av emfos:

Jag löste det!

Vad bra!

Posta koden om du vill ha synpunkter.

Visa signatur

Idioter förbokar datorspel.

Permalänk
Medlem

string namnen = ""; List<string> namn = new List<string>(); namn.Add(namnen); namn.Add(namnen); namn.Add(namnen); namn.Add(namnen); namn.Add(namnen); for (int i = 0; i< 5; i++) { Console.Write("Mata in ett namn: "); namnen = Console.ReadLine(); namn.Add(namnen); } foreach (string namnet in namn) { Console.WriteLine(namnet); } Console.WriteLine("----------------------------------------"); namn.Sort(); foreach (string namnet in namn) { Console.WriteLine(namnet); } Console.Read();

Permalänk
Medlem

@emfos: Du lägger fortfarande till 5 tomma strängar i listan i början av koden, så listan kommer innehålla 10 strängar där hälften är tomma efter att användaren matat in namnen.

Permalänk
Medlem

@perost: Aaah, jag tog bort de fem tomma strängarna, då såg det bättre ut

Permalänk

@emfos: Du kan skippa de 5 raderna efter du initierat och skapat listan, det de raderna gör är endast att lägga till strängen som är tom fem gånger. Antar att du tänkt att listan ska ha rum för fem element, men den är dynamisk och ökar storleken automatiskt om du lägger till ett nytt element. Som ovanstående sa får du nu istället en lista med storleken 10, där de 5 första elementen är tomma strängar.

En bra praxis när man approachar ett problem är att skriva upp i klartext vad du ska göra, alternativt att skriva ner pseudo-kod först och sedan steg för steg beta av det du skrivit. Det kan göra ett aningen komplext problem ganska simpelt