Permalänk

Hjälp med uppgift i C#

Hej!

Uppgiften är att bygga ett program med en strängvektor som har fem element. Användaren ska kunna spara fem saker, skriva ut de fem sparade sakerna, och söka bland dem.

Kriterierna är:
En vektor (array) där användaren kan mata in upp till fem stycken föremål. Det går fint att använda en for-loop som tilldelar vardera objekt en ReadLine på en gång.
Utskriften av innehållet, detta gör du med hjälp av for-loopen.
Menyn ska vara skriven med en SWITCH-sats.
Ditt program ska hantera felaktig inmatning så att du undviker att programmet kraschar.
Linjär sökning av innehållet i ryggsäcken.

Såhär ser mitt program ut hittils:

static void Main(string[] args)
{
string[] bag = new string[5];
bag[0] = "Tangentbord";
bag[1] = "";
bag[2] = "";
bag[3] = "";
bag[4] = "";

bool isRunning = true;
while (isRunning) // LOOPEN
{
Console.WriteLine("[1] Put items in your bag: ");
Console.WriteLine("[2] Show the items: ");
Console.WriteLine("[3] Search the bag: ");
Console.WriteLine("[4] Empty the bag: ");
Console.WriteLine("[5] Close the bag: ");
Console.Write("Choose what to do: ");
string menuChoice = Console.ReadLine();

switch (menuChoice)
{
case "1":

for (int i = 0; i < bag.Length; i++) // SPARA SAKER I RYGGSÄCKEN
{
Console.WriteLine("Put in items in your bag: " + i);
bag[i] = Console.ReadLine();
}
break;

case "2":

Console.WriteLine("You have: " + bag[0] + bag[1] + " in the bag."); // VISA VAD VI HAR I RYGGSÄCKEN
Console.ReadLine();
break;

case "3":
Console.WriteLine("Search an for item: "); // SÖK SAKER I RYGGSÄCKEN
string input = Console.ReadLine();
break;

case "4":
break;

case "5":

isRunning = false;
break;
}
Console.ReadLine();
}

Det som fattas:
- När sakerna i ryggsäcken skrivs ut i menyval 2 skrivs bara det första och andra objektet ut och inte alla
- Din sökning söker inte efter något objekt i ryggsäcken
- Ditt alternativ 4 tömmer inte ryggsäcken, utan går direkt till en break
- Helst när man har en Switch sats vill man använda integers för de olika fallen och inte strängar. Du skulle behöva konvertera menuChoice till en integer, samt lägga till ett default alternativ i din Switch som användaren kommer till ifall man skriver in något ogiltigt.

Jag har läst igenom allt material flera gånger men hittar inga lösningar.

Väldigt tacksam om någon skulle kunna hjälpa.

Permalänk
Medlem

- När sakerna i ryggsäcken skrivs ut i menyval 2 skrivs bara det första och andra objektet ut och inte alla
Du fyller din array (bag[0] till bag[4]) men du skriver bara ut bag[0] och bag[1] när du klickar på menyn.
Om du vill skriva ut allt som finns i din array kan du även använda en foreach loop.
Alternativt får du lägga allt från bag[0] till bag[4] i utskriften.

- Din sökning söker inte efter något objekt i ryggsäcken
Här har du ett exempel på hur man söker i en array.
https://www.tutorialsteacher.com/articles/search-value-in-arr...

- Ditt alternativ 4 tömmer inte ryggsäcken, utan går direkt till en break
Sök på Array.Clear.

- Helst när man har en Switch sats vill man använda integers för de olika fallen och inte strängar. Du skulle behöva konvertera menuChoice till en integer, samt lägga till ett default alternativ i din Switch som användaren kommer till ifall man skriver in något ogiltigt.
string menuChoice = Console.ReadLine(); konvertera denna till en int.

Istället för case "1" kan du skriva case 1. Alltså utan hartassarna.
Case 1 = int.
Case "1" = sträng.
Case '3' = char.

Som "default" i din switch case kan du ha t.ex:
"default:
Console.WriteLine("Not a valid input. Choose a number between 1-5");
break;"

Har du använt dig av metoder ännu? Istället för att skriva koden i din switch brukar man lägga koden i en metod och kalla på metoden från menyn.

Permalänk

Fråga i C#

Hej! Har fastnat på denna uppgift, någon som kan hjälpa?

Vad är sant om koden nedanför?

int choice = Convert.ToInt32(Console.ReadLine());

Koden saknar felhantering (TryParse / TryCatch)

Koden orsakar alltid körtidsfel

Man kan alltid konvertera en sträng till en int

"int" måste skrivas med stort "I"

Det måste finnas med en Console.WriteLine för att koden ska fungera

Om användaren inte skriver in en siffra så kraschar programmet.

Permalänk

Ingen här kommer ge dig svaren rakt av (hoppas jag).
Hur tänker du själv? Är det något specifikt du undrar över?

Permalänk
Medlem

Alla dessa saker är ju något du kan ta reda själv på om du bara startar upp Visual Studio

1. Känns ganska givet att det saknas (det finns ju inte med).
2. Testa och kör koden och se vad som händer.
3. Testa och kör koden och se vad som händer när du anger olika värden (Du har ju redan svarat på denna genom ditt sista påstående).
4. Testa med både litet och stort "i" för att se vad som händer.

Så egentligen behöver du inte vår hjälp.

Permalänk

@Reko85:
Tack för utförligt svar!

Jag försöker konvertera till int med:

int menuChoice = Convert.ToInt32(Console.ReadLine());

eller:

int menuChoice;
if(int.TryParse(input, out menuChoice))

Det fungerar dock inte när jag lägger det under: string menuChoice = Console.ReadLine();

Jag är helt ny i C# och vi har inte fått mycket material på detta.

Permalänk
Medlem

Du kan inte döpa både din INT och STRING till menuChoice.
Du borde prova söka lite i microsofts dokumentation: https://docs.microsoft.com/en-us/dotnet/csharp/programming-gu...
Eller bara skriva ut på google: "c# convert string to int" så kommer massa olika sätt att lösa problemet.

Vad är det som inte fungerar med:
int menuChoice = Convert.ToInt32(Console.ReadLine());

Det kommer crasha om du inte skriver in en siffra förstås, men skriver du en siffra ska det ju gå bra.

Permalänk

C# Fråga

Jag har skapat en array med fem element och jag vet att man kan referera till ett enskilt element med namn[i] som exempel.

Jag har dock fastnat på denna fråga:

Vad för slags fel får vi om vi försöker komma åt ett indexvärde som inte finns, och hur kan vi förhindra det?
Exempel; Om vi försöker komma åt sjätte elementet i en vektor med bara tre element, vad händer?

Vi har väldigt lite material att gå igenom så vore snällt om någon kunde hjälpa.

Permalänk
Medlem

har du provat att försöka använda namn[i] där i är något större än antal element? i det här fallet tex 6.

att svara på hur man förhindrar det är ju rätt svårt.. beror helt på hur man använder det. kör man index metoden (dvs hakparanteser []) så gälelr det ju att kolla så i inte är större än length-1
men bästa är ju att använda en for each loop istället.

Visa signatur

CPU: Ryzen 9 3900x Noctua NH-D14 MOBO: TUF Gaming X570-PLUS GPU: GTX 980 RAM: 32 GB 3200 MHz Chassi: R4 PSU: Corsair AX860 Hörlurar: SteelSeries 840 Mus: Logitech G502 Lightspeed V.v. nämn eller citera mig för att få svar.

Permalänk
Medlem

Gör en 5 platser lång array och försök anropa plats 6 så har du svaret.

Permalänk
Medlem
Skrivet av gamingfortnite18234931:

Jag har skapat en array med fem element och jag vet att man kan referera till ett enskilt element med namn[i] som exempel.

Jag har dock fastnat på denna fråga:

Vad för slags fel får vi om vi försöker komma åt ett indexvärde som inte finns, och hur kan vi förhindra det?
Exempel; Om vi försöker komma åt sjätte elementet i en vektor med bara tre element, vad händer?

Vi har väldigt lite material att gå igenom så vore snällt om någon kunde hjälpa.

Du har google, det finns hur mycket material som helst.

Men det är ju väldigt enkelt att bara testa själv?
https://dotnetfiddle.net/d3Jq1V

Permalänk
Moderator
Brons i quiz

@gamingfortnite18234931: Jag har återställt trådstarten. Förstöra tråden genom att radera vad tråden handlar om är respektlöst mot de som hjälp till och i framtiden om någon skulle ställa en liknande fråga.

Visa signatur

Citera om du vill ha svar!
Tycker du om sidospår? :D Besök The Wiki Game
Har du fråga angående modereringen? PM till Moderatorerna eller Kontaktformulär

Permalänk
Medlem
Skrivet av zaibuf:

Du har google, det finns hur mycket material som helst.

Men det är ju väldigt enkelt att bara testa själv?
https://dotnetfiddle.net/d3Jq1V

Tänk bara på att även Console.WriteLine(arr[5]); kommer ge error eftersom första index alltid är 0.

Visa signatur

AMD Ryzen 7 5800X3D | EVGA GeForce RTX 3080 10GB FTW3 ULTRA | ASUS ROG Strix B450-F Gaming | Corsair RM750X V2 | Crucial Ballistix Sport LT 3200MHz 16GB | Samsung 980 Pro 1TB | Crucial MX500 2TB | NZXT H500

Permalänk
Medlem
Skrivet av gamingfortnite18234931:

@Reko85:
Tack för utförligt svar!

Jag försöker konvertera till int med:

int menuChoice = Convert.ToInt32(Console.ReadLine());

eller:

int menuChoice;
if(int.TryParse(input, out menuChoice))

Det fungerar dock inte när jag lägger det under: string menuChoice = Console.ReadLine();

Jag är helt ny i C# och vi har inte fått mycket material på detta.

Nu kanske jag låter krass, men fokusera inte så mycket på mängden material från skolan. Lär dig googla efter informationen du söker, det kommer vara typ 50% av din arbetsdag senare

Din konvertering ser rätt ut, men som Visual Studio antagligen säger till dig så kan du inte döpa två variabler till samma sak.

Det bästa alternativet är TryParse, då den fångar eventuella fel som uppstår ifall användaren matar in saker som inte är siffror.

string value = Console.ReadLine(); int.TryParse(value, out int menuChoice);

Om man kollar på signaturen för int.TryParse så ser man att den även returnerar en bool som säger om den kunde konvertera eller inte.

public static bool TryParse (string s, out int result);

Så man skulle även kunna skriva

string value = Console.ReadLine(); bool isNumerical = int.TryParse(value, out int menuChoice); if (isNumerical) { // konverteringen lyckades! } else { // konverteringen misslyckades :( }

Visa signatur

| EVGA Z170 FTW | i7 6700k | ASUS RTX 3070 | 16GB DDR4 3200MHz | Cooler Master V850 | Samsung 840 Evo 250GB + 2x WD Black 500GB + Seagate 2TB SSHD + Samsung 970 Evo M.2 500GB |

Permalänk
Moderator
Festpilot 2020, Antiallo

@gamingfortnite18234931:

Jag har sammanfogat dina tre trådar.
Ett ämne = en tråd. Då får alla samma chans att synas.

Lycka till med programmeringen.
/DavidtheDoom, - Moderator

Visa signatur

 | PM:a Moderatorerna | Kontaktformuläret | Geeks Discord |
Testpilot, Skribent, Moderator & Geeks Gaming Huvudadmin