help with a menu option emptying array

Fikakakan

Member
Joined
Jul 14, 2021
Messages
5
Programming Experience
Beginner
//Sorry for the code comments being in swedish. So, I've tried local solutions for emptying ryggSaker if the input is 4, I now below, in pure desperation, have tride a if-loop so that the array goes empty if 4 is the input. And if there is any other choice between 1-3 and 5 it should continue in the other if-loop....



Backpack menu:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {

            string[] ryggSaker = new string[5];//Skapa stringvektor för att senare kunna stoppa in det avändaren skriver in i menyval 1.
            int index = 0;//Skapa index med värde noll så att vi kan fylla på med saker i ryggsäcken under menyval 1.

            //Skriv ut meny
            Console.WriteLine("Hej! Nu ska vi fylla din rygga men lite saker!");
            Console.WriteLine("[1] Lägg till ett föremål");
            Console.WriteLine("[2] Skriv ut alla föremål");
            Console.WriteLine("[3] Sök i ryggsäcken");
            Console.WriteLine("[4] Rensa ryggan");
            Console.WriteLine("[5] Avsluta");

            bool spela = true;//Skapa en bool [spela] så att när användaren har slutfört ryggan kan vi sätta den till falsk och avsluta programmet.
            while (spela)//Medans [spela]-loopen är sann körs if-looparna.
                
            {
                int menyVal = Convert.ToInt32(Console.ReadLine());//konvertera input(string) till en int så att vi kan skicka användarens val till rätt menyval(if).

                if (menyVal==4)
                {
                    Console.WriteLine("Ryggan är tömd!");
                    ryggSaker[index] = "";
                }
                else
                {

                    if (menyVal == 1)//Om användaren skriver in 1
                    {
                        try//Om detta, så fortsätt
                        {
                            Console.WriteLine("Lägg till något i ryggan: ");//Ber användaren skriva in något som den vill lägga i ryggsäcken.
                            ryggSaker[index] = Console.ReadLine();//Här använder jag den tomma index vi redan skapat med värde 0 så att det användaren skriver in kan deklareras på den första platsen i ryggSaker -->[0]
                            Console.WriteLine("Du la till " + ryggSaker[index]);//Skriv ut vad användaren lagt till senast.
                            index++;//Nästa gång loopen körs kommer index skrivas in på 2:a platsen i ryggSaker ---> [1]
                        }
                        catch (Exception error)//Annars gör detta, (failure)
                        {
                            Console.WriteLine("Ryggsäcken är full!");//Skriv ut att ryggsäcken är full. Användaren har försökt skriva in fler saker än vad det finns indexplatser i ryggSaker
                        }
                    }
                    if (menyVal == 2)//Om användaren skriver in 2
                    {
                        Console.WriteLine("Detta har du lagt till i ryggan: ");//Skriv ut vad användaren hittils lagt till i ryggan
                        for (int i = 0; i < ryggSaker.Length; i++)//for-loopen gör att vi kan skriva ut varje sak i ryggSaker som har lagts till. vid varje loop hoppar vi en plats vidare så länge i är mindre än antelet saker(loppen stannar alltså när vi skrivit ut alla indexplatser och dess innehåll).
                        {
                            Console.WriteLine(ryggSaker[i]);//Skriv ut i, vilket vi deklarerat i for-loopen ovan att i ska vara alla platser som finns i ryggSaker.
                        }
                    }
                    if (menyVal == 3)//Om användaren skriver in 3
                    {
                        Console.WriteLine("Sök i ryggsäcken: ");//Användaren skriver in vad den söker i ryggan
                        string hittaSak = Console.ReadLine();//Skapa string som innehåller det som användaren skrivit in som sökord
                        for (int i = 0; i < ryggSaker.Length; i++)//For-loopen ser till att vi går igenom alla indexplatser i ryggSaker
                        {
                            if (hittaSak == ryggSaker[i])
                                Console.WriteLine("Den finns på plats " + i);//Om det som användaren skrivit in (som nu lagrats i hittaSak) är samma som det som finns på något av indexplatserna i ryggSaker= Skriv ut på vilken indexplats den finns
                        }
                    }
                    /*if (menyVal == 4)
                    {
                        Console.WriteLine("Ryggan är tom!");
                    }
                    */
                    if (menyVal == 5)//Om användaren skrivit in 5
                    {
                        Console.WriteLine("Det var allt för idag, hej då!");//Skriv ut att vi är klara
                        break;//Bryt bool [spela] i while-loopen, spelet avslutas

                    }
                }

            }
            Console.ReadLine();
        }

    }
}
 
First things first, don't use all those if statements. At lest use else if so that you don't keep checking once you find a match. better still, use a switch statement.
 
As for the issue, what exactly do you mean by "emptying" an array? If you want all the elements set to null then do that. If you want the elements removed altogether then you're out of luck because arrays cannot be resized. You could create a new array but that doesn't seem like a very good solution. In that case, you should probably be using a List<string> rather than an array, in which case you can call its Clear method. You would also call Add to add an item and have the collection grow as you do.
 
Thank you all!
I probably should use switch.

I solved the problem by declaring my array to all empty indexes to "reset" all indexet to empty---> myArray = new string [5];
Is it true that this would preform the same outcome? ---> myArray=new string []{"","","","","",} ?
 
I solved the problem by declaring my array to all empty indexes to "reset" all indexet to empty---> myArray = new string [5];
That's not declaring anything. That is creating a new array object and assigning it to the variable. That will work alright but creating and throwing away arrays repeatedly is not really best practice.
Is it true that this would preform the same outcome? ---> myArray=new string []{"","","","","",} ?
No that is not the true. The first one creates an array where each element is null while the second one creates an array where each element is an empty string. An empty string is still an object. Would you consider an empty box and no box at all to be the same thing?
 
Back
Top Bottom