Добавление элемента в массив работает, но не отображается в другой инструкции switch

#c# #arrays

Вопрос:

В своем коде я пытаюсь создать 2 массива и иметь возможность добавлять в эти массивы дополнительные элементы, а затем распечатывать их. Я печатаю целые массивы в случае переключения 3, и ничего не происходит, но когда я копирую этот код в случай 1, он работает идеально. Это означает, что он использует старый массив вместо «обновленного». Кто-нибудь может мне помочь?

  using System;
    using System.Collections.Generic;
    using System.Linq;
    
    

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

        bool fortsatt = true;

        while (fortsatt)
{
        Console.WriteLine("Lägg till blogginlägg (1)");
        Console.WriteLine("Skriv ut inlägg (Skriv titeln) (2)");
        Console.WriteLine("Skriv ur alla blogginlägg (3)");
        Console.WriteLine("Avsluta (4)");

            string[] posts = { "jag åt inte frukost", "jag åt gott middag", "jag åt hamburgare" };
            string[] titles = { "Frukost", "Middag", "Mat" };

            string menu = Console.ReadLine();

            switch (menu)
            {
                case "1":

                    
                    Console.WriteLine("Mata in en text");
                    string inmatat = Console.ReadLine();       

                    List<string> list = new List<string>(posts.ToList());
                    list.Add(inmatat);
                    posts = list.ToArray();

                    Console.WriteLine("Mata in en titeln");
                    string titel_imatning = Console.ReadLine();

                    List<string> list_of_titles = new List<string>(titles.ToList());
                    list.Add(titel_imatning);
                    titles = list_of_titles.ToArray();

                    break;
                    
                case "2":

                    Console.WriteLine("Skriv titeln:  ");
                    string search = Console.ReadLine();
                    bool found = false;
                    for (int i = 0; i < posts.Length; i  )
                    {
                        if (titles[i] == search)
                        {
                            
                            Console.WriteLine("tDet är vad jag har hittat: "  
                                "ntTiteln: "   titles[i]  
                                "ntInlägg: "  
                                posts[i]   "nt");
                            found = true;
                            break;
                        }
                    }

                    if (!found)
                        Console.WriteLine("t Kunde inte hitta ");
                    break;

                case "3":

                    foreach (var value in posts)
                    {
                        Console.WriteLine(value);
                    }
                    
                    break;

                case "4":
                    Console.WriteLine("Tack för att du använde min kod");
                    fortsatt = false;
                    break;


                default:                        
                    

                break;
            }
        }
    }
}
 

}

Ответ №1:

Вы каждый раз создаете массивы с нуля в каждом из ваших основных циклов во время выполнения.

Поместите массивы за пределы

 while(true)
 

Подобный этому:

       bool fortsatt = true;

            string[] posts = { "jag åt inte frukost", "jag åt gott middag", "jag åt hamburgare" };
            string[] titles = { "Frukost", "Middag", "Mat" };

        while (fortsatt)
        {
         Console.WriteLine("Lägg till blogginlägg (1)");
         Console.WriteLine("Skriv ut inlägg (Skriv titeln) (2)");
         Console.WriteLine("Skriv ur alla blogginlägg (3)");
         Console.WriteLine("Avsluta (4)");

            string menu = Console.ReadLine();

            switch (menu)
            {
                case "1":

                    
                    Console.WriteLine("Mata in en text");
                    string inmatat = Console.ReadLine();       

                    List<string> list = new List<string>(posts.ToList());
                    list.Add(inmatat);
                    posts = list.ToArray();

                    Console.WriteLine("Mata in en titeln");
                    string titel_imatning = Console.ReadLine();

                    List<string> list_of_titles = new List<string>(titles.ToList());
                    list.Add(titel_imatning);
                    titles = list_of_titles.ToArray();

                    break;
                    
                case "2":

                    Console.WriteLine("Skriv titeln:  ");
                    string search = Console.ReadLine();
                    bool found = false;
                    for (int i = 0; i < posts.Length; i  )
                    {
                        if (titles[i] == search)
                        {
                            
                            Console.WriteLine("tDet är vad jag har hittat: "  
                                "ntTiteln: "   titles[i]  
                                "ntInlägg: "  
                                posts[i]   "nt");
                            found = true;
                            break;
                        }
                    }

                    if (!found)
                        Console.WriteLine("t Kunde inte hitta ");
                    break;

                case "3":

                    foreach (var value in posts)
                    {
                        Console.WriteLine(value);
                    }
                    
                    break;

                case "4":
                    Console.WriteLine("Tack för att du använde min kod");
                    fortsatt = false;
                    break;


                default:                        
                    

                break;
            }
 

Комментарии:

1. Большое вам спасибо. Даже после того, как я вывел их за пределы цикла while, мой код все равно не может печатать дополнительные элементы :/

2. Я попробовал ваш код в LINQPad, он выводит дополнительные элементы в случае переключателя 3. Вы только распечатываете posts , а не titles в случае 3.

3. хммм… Я использую visual studio. Переключатель 3 должен печатать только сообщения, поэтому он работает правильно. Спасибо.

4. Нет. Это не работает на моем компьютере. imgur.com/a/3inKKmN у вас есть скриншот здесь.

5. Вы пытались перестроить свое решение? Я скопировал ответ, который я предоставил в visual studio, он работает.

Ответ №2:

Вы, кажется, показываете меню в цикле. И вы инициализируете массивы posts и titles внутри этого цикла. Таким образом, все изменения, внесенные пользователем при первом запуске, будут отброшены повторной инициализацией массива при следующем запуске / цикле.

Решение: инициализируйте массив вне цикла.

     bool fortsatt = true;
    string[] posts = { "jag åt inte frukost", "jag åt gott middag", "jag åt hamburgare" };
    string[] titles = { "Frukost", "Middag", "Mat" };

    while (fortsatt)
    {
        Console.WriteLine("Lägg till blogginlägg (1)");
        Console.WriteLine("Skriv ut inlägg (Skriv titeln) (2)");
        Console.WriteLine("Skriv ur alla blogginlägg (3)");
        Console.WriteLine("Avsluta (4)");
        //....
            
 

Комментарии:

1. Большое вам спасибо. С моей стороны было глупо класть их туда. И все же изменения, которые я вношу, все еще не проявляются :/