Permalänk
Medlem

Programmering 1 C# ryggsäcken

Hej!
Har kommit en bit på kursen och har varit relativt okej att förstå fram tills denna övningen! Jag har läst och kollat alla forum men fattar verkligen inget! Det jag ska göra är skapa en meny som ska innehålla en vektor, där användaren kan mata in upp till 5 föremål. Utskrift av innehållet med hjälp av for-loopen. Programmet ska hantera felaktig inmatning och det ska man göra med TryParse och så sist linjär sökning.

Inget funkar i mitt program! När jag väljer meny 1 och skriver in mina föremål så kommer menyval 1 upp 5 gånger, samma med 2,3 och 4 avslutar den. När jag söker efter mina föremål i menyval 3 så finns de inte sparade... Dessutom fattar jag inte vart jag ska skriva in TryParse. Jag lägger in hur jag gjort så kanske någon kan få mig förstå vart jag gör fel.

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

namespace vektorer
{
class Program
{
static void Main(string[] args)
{
int föremål = 5;
string[] rygga = new string[föremål];
bool minBool = true;

while (minBool)
{
Console.WriteLine("Välkommen till ryggsäcken!");

Console.WriteLine("[1] Lägg till 5 föremål i ryggsäcken");

Console.WriteLine("[2] Visa allt innehåll i ryggsäcken");

Console.WriteLine("[3] Sök efter ett föremål");

Console.WriteLine("[4] Avsluta programmet");

string menyVal = Console.ReadLine();
switch (menyVal)

{
case "1":
{
for (int i = 0; i < rygga.Length; i++)
{
Console.Write("Skriv in 5 föremål: ");
rygga[i] += Console.ReadLine();
Console.WriteLine("Föremålen du skrev var" + rygga[i]);
}
break;
}
case "2":
{
for (int i = 0; i < rygga.Length; i++)
{
Console.WriteLine("I ryggsäcken finns: " + rygga[i]);
}
break;
}
case "3":

Console.Write("Skriv in ett sökord: ");
string sökord = Console.ReadLine();

for (int i = 0; i < rygga.Length; i++)
{
if (sökord.ToUpper() == rygga[i].ToUpper())
{

Console.WriteLine("Din sökning, " + rygga[i] + "fanns i ryggsäcken!");
}
else
{
Console.WriteLine("Det du söker efter finns inte i ryggsäcken!");
}
break;
}
case "4":
{
minBool = false;
break;

}
}
}

}
}
}

Permalänk
Medlem
Permalänk
Medlem

Fundera över vad din kod faktiskt gör. Verkar det rimligt?
Lös en uppgift i taget och tänk ut vad som behöver göras.
Hur lägger man till ett nytt värde i en vektor?
Hur hämtar man ut ett specifikt värde?

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk
Medlem

Jag testkörde och tycker nog att det fungerar ganska bra

Välkommen till ryggsäcken! [1] Lägg till 5 föremål i ryggsäcken [2] Visa allt innehåll i ryggsäcken [3] Sök efter ett föremål [4] Avsluta programmet 1 Skriv in 5 föremål: tröja Föremålen du skrev vartröja Skriv in 5 föremål: byxa Föremålen du skrev varbyxa Skriv in 5 föremål: yxa Föremålen du skrev varyxa Skriv in 5 föremål: strumpa Föremålen du skrev varstrumpa Skriv in 5 föremål: mössa Föremålen du skrev varmössa Välkommen till ryggsäcken! [1] Lägg till 5 föremål i ryggsäcken [2] Visa allt innehåll i ryggsäcken [3] Sök efter ett föremål [4] Avsluta programmet 2 I ryggsäcken finns: tröja I ryggsäcken finns: byxa I ryggsäcken finns: yxa I ryggsäcken finns: strumpa I ryggsäcken finns: mössa Välkommen till ryggsäcken! [1] Lägg till 5 föremål i ryggsäcken [2] Visa allt innehåll i ryggsäcken [3] Sök efter ett föremål [4] Avsluta programmet 3 Skriv in ett sökord: yxa Det du söker efter finns inte i ryggsäcken! Det du söker efter finns inte i ryggsäcken! Din sökning, yxafanns i ryggsäcken! Det du söker efter finns inte i ryggsäcken! Det du söker efter finns inte i ryggsäcken! Välkommen till ryggsäcken! [1] Lägg till 5 föremål i ryggsäcken [2] Visa allt innehåll i ryggsäcken [3] Sök efter ett föremål [4] Avsluta programmet

Förändringar:
Flytta utskriften av din välkomstmeny till en bättre plats. Men om du flyttar hela menyn så behöver användaren uppmaning om att ge input för att påbörja nytt steg. Då blir det som nedan
Kanske förändra så att du inte skriver ut resultatet av sökningen efter varje kontroll. Se exempel nedan.
Kanske förändra så att du håller koll på hur många saker som användaren har matat in.

Välkommen till ryggsäcken! [1] Lägg till 5 föremål i ryggsäcken [2] Visa allt innehåll i ryggsäcken [3] Sök efter ett föremål [4] Avsluta programmet 1 Skriv in 5 föremål: yxa Föremålen du skrev var yxa Skriv in 5 föremål: tröja Föremålen du skrev var tröja Skriv in 5 föremål: byxa Föremålen du skrev var byxa Skriv in 5 föremål: strumpa Föremålen du skrev var strumpa Skriv in 5 föremål: mössa Föremålen du skrev var mössa mössa 2 I ryggsäcken finns: yxa I ryggsäcken finns: tröja I ryggsäcken finns: byxa I ryggsäcken finns: strumpa I ryggsäcken finns: mössa 3 Skriv in ett sökord: strump1 Det du söker efter finns inte i ryggsäcken! 3 Skriv in ett sökord: strumpa Din sökning, strumpa fanns i ryggsäcken!

Permalänk
Medlem

MickeBoy, tack för att du fick mig att förstå! Satt uppe hela natten och förstod inget, men nu hänger jag med! Dock så förstår jag inte vart jag ska kunna ha en TryParse för att inte få programmet att krascha men det löser sig. Tack för hjälpen!

Permalänk
Medlem
Skrivet av Nona92:

MickeBoy, tack för att du fick mig att förstå! Satt uppe hela natten och förstod inget, men nu hänger jag med! Dock så förstår jag inte vart jag ska kunna ha en TryParse för att inte få programmet att krascha men det löser sig. Tack för hjälpen!

Jag tror att tanken är att du ska ta användarens input som är text och omvandla det till ett tal och sedan få din switch-sats att bero på ett tal istället för text. Då behöver du try-parse för att säkerställa att du faktiskt har ett tal eftersom parse ger ett fel om du försöker omvandla "mus" till ett tal (medan "3" såklart går bra)

Permalänk
Medlem

Jag har gått och tänkt lite mer på denna uppgift. Det finns ett par saker till som du skulle kunna snygga till om du ville. Vad händer om du t.ex. söker direkt utan att mata in något? Jag vet inte hur noggrant det är med felhantering, men det borde du fixa. Om du direkt efter start väljer att visa innehållet så blir det inte heller så snyggt.

Såhär skulle du kunna försöka få till det:

Välkommen till ryggsäcken! [1] Lägg till 5 föremål i ryggsäcken [2] Visa allt innehåll i ryggsäcken [3] Sök efter ett föremål [4] Avsluta programmet Gör ditt val (1-4): 21 Felaktig inmatning. Gör ditt val (1-4): apa Felaktig inmatning. Gör ditt val (1-4): 3 Skriv in ett sökord: yxa Det du söker efter finns inte i ryggsäcken! Gör ditt val (1-4): 2 I ryggsäcken finns ingenting. Gör ditt val (1-4): 4

Permalänk
Medlem

Läraren vill nog att du skall använda "TryParse" för att omvandla ReadLine strängen till heltal då dina kommandon är heltals siffror, sedan kan du göra din switch case på heltal istället för strängar. Man hade även kunnat koppla heltalen mot en Enum för att göra switch casen snyggare. Detta är bara en bonus.

Felaktig inmatning önskemålet kan hanteras antingen via TryParsen eller via switchen, där switch har både "case" och "default". Där default körs om inget case uppfylldes. T.ex om användaren skriver in "8" så körs default:en då det inte finns något case för "8".

I övrigt finns det en sorts bug där du använder "+=" när du lägger till föremål, detta gör att nästa gång man lägger till föremål slås dom ihop med det tidigare föremålet. Istället för att ersätta.