Loading...
Elena123456 avatar Elena123456 235 Точки

06. List Manipulation Basics

Понеже не открих такава тема във форума, освен на Java, пускам и за C#. Когато тествам с примера по-долу и стигам до командата "Insert 8 3" програмата се чупи-"Index out of range exception". Тествала съм по отделно всяка една команда и работят коректно. Моля за помощ, защото сама не откривам какво да коригирам в кода си, а Judge ми дава Runtime Error на Test#5 и Test #4.

Предварително благодаря!

60/100 https://judge.softuni.bg/Contests/Practice/Index/1210#5

Условие:

Write a program that reads a list of integers. Then until you receive "end", you will receive different commands:

Add {number}: add a number to the end of the list.
Remove {number}: remove a number from the list.
RemoveAt {index}: remove a number at a given index.
Insert {number} {index}: insert a number at a given index.

Note: All the indices will be valid!

When you receive the "end" command, print the final state of the list (separated by spaces).

Input

4 19 2 53 6 43
Add 3
Remove 2
RemoveAt 1
Insert 8 3

end

 

Output

4 53 6 8 43 3

 

 

 

using System;
using System.Linq;
using System.Collections.Generic;
namespace List
{
    class MainClass
    {
        public static void Main()
        {

            List<int> numbers = Console.ReadLine().Split().Select(int.Parse).ToList();

            string command = Console.ReadLine();
            while (command != "end")
            {
              string[] commandArray = command.Split();

                if (commandArray[0] == "Add")
                {

                    int numberToAdd = int.Parse(commandArray[1]);
                    numbers.Add(numberToAdd); 
                }
                else if (commandArray[0] == "Remove")
                {
                    int removeNumber = int.Parse(commandArray[1]);
                    numbers.Remove(removeNumber);
                }
                else if (commandArray[0] == "RemoveAt")
                {
                    int removeAtIndex = int.Parse(commandArray[1]);
                    numbers.RemoveAt(removeAtIndex);
                }

                 else if (commandArray[0] == "Insert")
                {
                    int insertIndex = int.Parse(commandArray[1]);
                    int insertNumber = int.Parse(commandArray[2]);
                    numbers.Insert(insertIndex, insertNumber);
                }

                command = Console.ReadLine();
            }

            Console.WriteLine(string.Join(" ",numbers));
        }
      }
    }

 

Тагове:
0
Programming Fundamentals 22/07/2020 12:34:31
Elena123456 avatar Elena123456 235 Точки

Най-накрая си открих грешката, след като взех един лист А4 и разсписах масива с химикалка след всяка една команда. И вместо да съм на морето в момента по врема на отпуската си, аз разписвам масиви...с химикалка. :)

Ако някой изпитва затруднения с масиви и листове, нека да дерзае, защото макар и с малко по-бавно темпо разбираме, че нещата са логични и вярвам и в един момент и интуитивни. :)

Проблема ми беше в командата "Insert 8 3"-"8" е самото число, което трябва да добавим, а "3" е самия индекс, а не обратното. Ето и защо получавах "Index out of range exception", защото просто листа няма индекс "8", че да му подавам там числото "3".

И корекцията в кода ми е това (размених два реда):

else if (commandArray[0] == "Insert")
                {
                    int insertNumber = int.Parse(commandArray[1]);
                    int insertIndex = int.Parse(commandArray[2]);
                    numbers.Insert(insertIndex, insertNumber);
                }

вместо това:

else if (commandArray[0] == "Insert")
                {
                    int insertIndex = int.Parse(commandArray[1]);
                    int insertNumber = int.Parse(commandArray[2]);
                    numbers.Insert(insertIndex, insertNumber);
                }

И все пак ще бъда благодарна ако видя друго решение на задачата-примерно само с масиви, без листове или  с различна логика. :)

Поздрави!

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.