Задача - 06. Triangle of 55 Stars
Здравейте. Имам проблем с тази задача. До колкото си спомням този код би трябвало да свърши работа, но ефекта е като все едно в скобите е само ("*").
for (int i = 0; i < 55; i++)
{
Console.WriteLine("*", i);
}
"Напишете C# конзолна програма, която отпечатва триъгълник от 55 звездички, разположени на 10 реда"
Моля те кажи дали това ти е свършило работа понеже навсякъде чета че веднъж създаден по този начин стринг със съдържание, повторно не може да се презаписва (че и със съдържание надвишаващо началното като размер).
Woofles,
Най-вероятно въпросът ти е свързан с факта, че string-овете в C# са immutable (тоест не могат да бъдат модифицирани). В случая обаче, принципът е друг.
Ако имаш string greetings = "Hello", това означава, че е заделено парче памет, което съдържа в себе си "Hello". Когато се опиташ да го промениш, например: greetings = greetings + " C#", това което се случва е, че на друго място в паметта се създава цялото "Hello C#", а после тази стойност се присвоява на променливата greetings. Предишната стойност "Hello" остава, докато Garbage Collector-a не я премахне от паметта. Затова съществува и StringBuilder, който е mutable и позволява да се извършват операции като добавяне на текст към string, без да се създават излишни копия. На този етап от обучението, string ти върши идеална работа и няма за какво да се притесняваш.
Относно star += star от примера на колегата - може да се адаптира към конкретната задача, но трябва да се замени със star += "*", защото в противен случай броят на звездите няма да нараства с една, а ще се удвоява при всяко изпълнение. Препоръчвам ти да разучиш new string() за конкретната задача (има доста примерни решения с него).