#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. Большое вам спасибо. С моей стороны было глупо класть их туда. И все же изменения, которые я вношу, все еще не проявляются :/