Loading...
Miroslavpetrov96 avatar Miroslavpetrov96 1 Точки

Pokemon Trainer C# Advanced

Здравейте, може ли малко помощ да открия къде греша, Джъдж ми дава 60/100 като 6,7,8 и 10 тест ми гърмят с Runtime Error

Условие:

https://judge.softuni.bg/Contests/Compete/Index/1479#8

 

Моето решение

Class Program  -->https://pastebin.com/KKD7Xe4P

Class Trainer  ---> https://pastebin.com/ruchW6j2

Class Pokomeno  ---> https://pastebin.com/5K49Mi8p

Тагове:
0
C# Advanced
Axiomatik avatar Axiomatik 2422 Точки

Runtime most likely triggered in your Attacking method, when removing weak pokemons from the trainer's collection inside of a foreach loop (96-110) => modifying a collection inside of a foreach will trigger an exception ! The best way is to use Linq and filter out all of the weak pokemons:

using System;
using System.Collections.Generic;
using System.Linq;
 
namespace P09_POKEMONTRAINER
{
    public class Program
    {
        static void Main(string[] args)
        {
            string input = string.Empty;
            List<Trainer> listTrainers = new List<Trainer>();
 
            while ((input = Console.ReadLine()) != "Tournament")
            {
                string[] data = input.Split();
 
                string trainerName = data[0];
                string pokemonName = data[1];
                string pokemonElement = data[2];
                int pokemonHealth = int.Parse(data[3]);
 
                Pokemon currentPokemon = new Pokemon(pokemonName, pokemonElement, pokemonHealth);
 
                Trainer currentTrainer = new Trainer();
 
                bool checkTrainer = listTrainers.Any(n => n.Name == trainerName);
 
                if (!checkTrainer)
                {
                    currentTrainer.Name = trainerName;
                    currentTrainer.collectionPokemon.Add(currentPokemon);
                    listTrainers.Add(currentTrainer);
                }
                else
                {
                    foreach (var trainer in listTrainers)
                    {
                        if(trainer.Name == trainerName)
                        {
                            trainer.collectionPokemon.Add(currentPokemon);
                        }
                    }
                }
            }
 
            string command = Console.ReadLine();
            while(command != "End")
            {
                switch(command)
                {
                    case "Fire":
                        atacking(listTrainers, command);
 
                        break;
 
 
 
                    case "Water":
                        atacking(listTrainers, command);
                        break;
 
 
 
                    case "Electricity":
                        atacking(listTrainers, command);
                        break;
                }
 
                command = Console.ReadLine();
            }
 
 
            foreach (var trainer in listTrainers.OrderByDescending(a => a.NumberOfBadges))
            {
                Console.WriteLine($"{trainer.Name} {trainer.NumberOfBadges} {trainer.collectionPokemon.Count}");
            }
        }
 
        private static void atacking(List<Trainer> listTrainers, string command)
        {
            foreach (var trainer in listTrainers)
            {
                bool isTranerHasThatElement = false;
                foreach (var pokemon in trainer.collectionPokemon)
                {
                    if (command == pokemon.Element)
                    {
                        trainer.NumberOfBadges++;
                        isTranerHasThatElement = true;
                        break;
                    }
 
                }
 
                if (isTranerHasThatElement == false)
                {
                    // LINQ alternative
                    trainer.collectionPokemon.ForEach(pokemon => pokemon.Health -= 10);
                    trainer.collectionPokemon.RemoveAll(pokemon => pokemon.Health <= 0);


                    // foreach (var pokemon in trainer.collectionPokemon)
                    // {
                    //     pokemon.Health -= 10;
                    //     if (pokemon.Health <= 0)
                    //     {
                    //         EXCEPTION => When removing/changing collection    
                    //         trainer.collectionPokemon.Remove(pokemon);
                    //         if(trainer.collectionPokemon.Count == 0)
                    //         {
                    //             break;
                    //         }
                    //     }
                    // }
                }
            }
        }
    }
}

 

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