Професионална програма
Loading...
+ Нов въпрос
Nikodon avatar Nikodon 3 Точки

7. List Manipulation Advanced

Привет,

 

правя задача 7 -ма от Листове - Лаб .

Докарах я до 50/100. Бъгва ми се при печатането. Изкарвам нужните данни, но забелязвам, че при подаване на condition filter , при вторият такъв , той се печата на същият ред , а при end, ми печата отново входа след командата. Прилагам кода , заедно с условието на задачата и аутпута ми от джъдж.

https://pastebin.com/WCp9UShK?fbclid=IwAR2NuFb4QEQYaP4Hg3-IR4zEUb-kwP_fYz8JKWGIu9SOxWoCOUZxvVj0_E0

Next, we are going to implement more complicated list commands, extending the previous task. Again, read a list and keep reading commands until you receive "end":

Contains {number} – check if the list contains the number and if so - print "Yes", otherwise print "No such number".
PrintEven – print all the even numbers, separated by a space.
PrintOdd – print all the odd numbers, separated by a space.
GetSum – print the sum of all the numbers.
Filter {condition} {number} – print all the numbers that fulfill the given condition. The condition will be either '<', '>', ">=", "<=".

After the end command, print the list only if you have made some changes to the original list. Changes are made only from the commands from the previous task.

Example

Input

Output

2 13 43 876 342 23 543

Contains 100

Contains 543

PrintEven

PrintOdd

GetSum

Filter >= 43

Filter < 100

end

 

No such number

Yes

2 876 342

13 43 23 543

1842

43 876 342 543

2 13 43 23

 

 

Това ми е output-a

2 13 43 876 342 23 543
Contains 100
No such number
Contains 543
Yes
PrintEven
2 876 342
PrintOdd
13 43 23 543
GetSum
1842
Filter >= 43
43 876 342 543 Filter < 100
2 13 43 23 end
2 13 43 876 342 23 543

Тагове:
0
Module: C# Advanced
kkaraivanov avatar kkaraivanov 452 Точки
Best Answer

Здравей колега. Ето моето предложение -

На проверките

case "Add": int numberToAdd = int.Parse(lines[1]); numbers.Add(numberToAdd); break;
case "Remove": int numberToRemove = int.Parse(lines[1]); numbers.Remove(numberToRemove); break;
case "RemoveAt": int numberToRemoveAt = int.Parse(lines[1]); numbers.RemoveAt(numberToRemoveAt); break;
case "Insert":
    int numberToInsert = int.Parse(lines[1]);
    int indexToInsert = int.Parse(lines[2]);
    numbers.Insert(indexToInsert, numberToInsert);
    break;

сложи една булева променлива, например ето така

case "Add": int numberToAdd = int.Parse(lines[1]); numbers.Add(numberToAdd); chekOldLessons = true; break;
case "Remove": int numberToRemove = int.Parse(lines[1]); numbers.Remove(numberToRemove); chekOldLessons = true; break;
case "RemoveAt": int numberToRemoveAt = int.Parse(lines[1]); numbers.RemoveAt(numberToRemoveAt); chekOldLessons = true; break;
case "Insert":
    int numberToInsert = int.Parse(lines[1]);
    int indexToInsert = int.Parse(lines[2]);
    numbers.Insert(indexToInsert, numberToInsert);
    chekOldLessons = true;
    break;

иако променливата е true, принтирай извън цикъла ето така

if(chekOldLessons)
   Console.WriteLine(string.Join(" ", numbers));

за проверките "PrintEven": и "PrintOdd": може да ползваш например

Console.WriteLine(string.Join(" ", numbers.Where(number => number % 2 == 0)));
и
Console.WriteLine(string.Join(" ", numbers.Where(number => number % 2 != 0)));

а за "Contains":

Console.WriteLine(numbers.Contains(numberToContain) ? "Yes" : "No such number");

за проверката case "GetSum":  листът си има собствен метод който можеш да използваш - numbers.Sum();

за проверката case "Filter": метода го направи така

static List<long> Filter(List<long> numbers, string condition, long filterNumber)
        {
            //'<', '>', ">=", "<="
            List<long> temp = new List<long>();
            switch (condition)
            {
                case "<":
                    temp = numbers.Where(num => num < filterNumber).ToList();
                    break;
                case ">":
                    temp = numbers.Where(num => num > filterNumber).ToList();
                    break;
                case "<=":
                    temp = numbers.Where(num => num <= filterNumber).ToList();
                    break;
                case ">=":
                    temp = numbers.Where(num => num >= filterNumber).ToList();
                    break;
            }

            return temp;
        }

и принтирай в суич-а

Console.WriteLine(string.Join(" ", Filter(numbers, condition, filterNumber)));

След тези корекции, мисля че ще ти върне 100/100 и кодът ще ти е около 90 реда. Реално грешката ти е в принтирането на предишната задача и сегашната, заради което е булевата. Стойностите от предишната задача принтирай само ако има такъв вход и затова го изнасяш извън циъла с булева. Всички изчисления по условието на тази задачи ги принтирай във всеки кейс и ще се получи.

0
16/02/2020 22:32:27
Nikodon avatar Nikodon 3 Точки

Благодаря ти, отново! Получи се, бях пропуснал варианта от условието, когато има промяна.

0