Variable loses value before operation C #

1

I have not read C # for a while, I am doing a simple code to perform simulations on demand and process data by applying FIFO. My problem is regarding the variable attributes of the Queue class, I debugged the program and noticed that when I run the generateMetrics () method the attributes are empty, with .Count = 0. Can anyone help me? Below my code.

class Fila
{
    // Lista contendo tempos de espera na fila
    public List<int> listaTempoEspera  { get; set; }
    // Lista tempo de processamento
    public List<int> listaTempoProcessamento { get; set; }
    // Lista demanda, intervalo entre chegada de novos itens a serem processados
    public List<int> listaIntervaloDemanda { get; set; }
    // Uma listagem com o tempo  que o sistema ficou ocioso.
    public List<int> listaTempoOcioso { get; set; }
    // Métrica
    public Metrica metrica { get; set; }
    // Construtores

    public Fila(List<int>listaProcessamento, List<int> listaDemanda)
    {
        this.listaIntervaloDemanda = listaDemanda;
        this.listaTempoProcessamento = listaProcessamento;

        this.listaTempoEspera = new List<int>();
        this.listaTempoOcioso = new List<int>();
        this.metrica = new Metrica();
    }

    public Fila()
    {
        this.listaIntervaloDemanda = new List<int>();
        this.listaTempoProcessamento = new List<int>();
        this.listaTempoEspera = new List<int>();
        this.listaTempoOcioso = new List<int>();
        this.metrica = new Metrica();

    }


    // Executar Simulação

    public void ExecutarSimulacao(List<int> varExTempoProcessamento, List<int> varExTempoDemanda)
    {
        // Cria variáveis para execução  dos métodos            
        // Inicia var da fila
        List<int> filaExecucao = new List<int>();
        // Tempo na fila
        List<int> tempoNaFila = new List<int>();
        //  Variavel de Tempo
        int tempoTotal = 0;
        int tempoChegadaDemanda = 0;           
        //  Variavel sinalizacao sistemaOcupado
        bool sistemaOcupado = false;
        // Var processamento
        int processamentoAtual = 0;
        // var TempoOcioso
        int tempoOcioso = 0;   

        while (varExTempoProcessamento.Count > 0 || varExTempoDemanda.Count > 0 || filaExecucao.Count > 0)
        {
            // Incrementa o tempo a cada iteração
            tempoTotal++;
            tempoChegadaDemanda++;

            // Faz o teste nova Demanda
            bool novaDemanda = tempoChegadaDemanda == varExTempoDemanda[0];
            if (novaDemanda)
            {
                // Remove da Lista
                varExTempoDemanda.RemoveAt(0);
                // Zera  o tempoChegadaDemanda
                tempoChegadaDemanda = 0;
                // Verifica se o sistema esta executando algum pedido                    
                if (sistemaOcupado == false)
                {
                    // Atribue nova chegada diretamente ao processamento
                    processamentoAtual = varExTempoProcessamento[0];
                    // Deleta da fila
                    varExTempoProcessamento.RemoveAt(0);
                    // Muda o status do sistema par ocupado
                    sistemaOcupado = true;
                    //Adiciona 0(Zero) a lista tempo de espera
                    listaTempoEspera.Add(0);
                }
                else
                {
                    // Caso o sistema estivesse ocioso, envia o dado para a lista.
                    if (tempoOcioso  > 0)
                    {
                        listaTempoOcioso.Add(tempoOcioso);
                        tempoOcioso = 0;
                    }                        
                    // Adiciona a fila
                    filaExecucao.Add(varExTempoProcessamento[0]);
                    // Remove da lista de processamento
                    varExTempoProcessamento.RemoveAt(0);
                    // Cria nova posição na fila
                    tempoNaFila.Add(0);
                }

            } // Fim If Nova Demanda


            // IF Sistema em Processamento
            if (sistemaOcupado && processamentoAtual > 0)
            {
                processamentoAtual--;
            }
            else
            {
                // Verifica se há alguem na fila
                if (filaExecucao.Count > 0)
                {
                    // Atribue novo processamento diretamente da fila
                    processamentoAtual = filaExecucao[0];
                    // Deleta da fila
                    filaExecucao.RemoveAt(0);
                    // Adiciona o tempo de fila a lista TempoEspera
                    listaTempoEspera.Add(tempoNaFila[0]);
                    // Remove  da Lista tempo da fila elemento já computado
                    tempoNaFila.RemoveAt(0);
                    // Não há mudança no status do sistema
                    // Adiciona tempo Não ocioso
                    listaTempoOcioso.Add(0);

                }
                else
                {
                    sistemaOcupado = false;
                }
            } // Fim do IF Sistema em Processamento

            // Tempo de fila
            bool existeFila = filaExecucao.Count > 0;
            if (existeFila)
            {
                for (int i = 0; i < filaExecucao.Count; i++)
                {
                    tempoNaFila[i]++;
                }
            }
            else
            {
                tempoOcioso++;
            } // Fim tempo de fila


        }
        metrica.tempoTotal = tempoTotal;
    } // Fim método ExecutarSimulacao

    // Gerar Métricas

    public Metrica GerarMetricas()
    {
        //Gera as metricas do tempo de espera
        GerarMetricasTempoEspera();
        //Gera as metricas do tempo de Intervalo entre demandas
        GerarMetricasTempoDemanda();
        //Gera as metricas do tempo Ocioso
        GerarMetricasTempoOcioso();
        //Gera as metricas do tempo de processamento
        GerarMetricasTempoProcessamento();

        return this.metrica;

    } // Fim método GerarMetricas

    public void GerarMetricasTempoEspera()
    {
        // Calcula a Média
        int media = 0;
        for (int i = 0; i < listaTempoEspera.Count; i++)
        {
            media += listaTempoEspera[i];
        }
        if (listaTempoEspera.Count != 0)
        {
            metrica.mediaEsperaFila = media / listaTempoEspera.Count;
        }

        // Calcula a Moda
        var moda = listaTempoEspera.GroupBy(n => n).
               OrderByDescending(g => g.Count()).
               Select(g => g.Key).FirstOrDefault();

        metrica.modaEsperaFila = moda;

    }

    public void GerarMetricasTempoProcessamento()
    {
        // Calcula a Média
        int media = 0;
        for (int i = 0; i < listaTempoProcessamento.Count; i++)
        {
            media += listaTempoProcessamento[i];
        }
        if (listaTempoProcessamento.Count !=0)
        {
            metrica.mediaProcessamento = media / listaTempoProcessamento.Count;
        }

        // Calcula a Moda
        var moda = listaTempoProcessamento.GroupBy(n => n).
               OrderByDescending(g => g.Count()).
               Select(g => g.Key).FirstOrDefault();

        metrica.modaProcessamento = moda;

    }

    public void GerarMetricasTempoDemanda()
    {
        // Calcula a Média
        int media = 0;

        for (int i = 0; i < listaIntervaloDemanda.Count; i++)
        {
            media += listaIntervaloDemanda[i];
        }
        if (listaIntervaloDemanda.Count !=0)
        {
            metrica.mediaDemanda = media / listaIntervaloDemanda.Count;
        }

        // Calcula a Moda
        var moda = listaIntervaloDemanda.GroupBy(n => n).
               OrderByDescending(g => g.Count()).
               Select(g => g.Key).FirstOrDefault();

        metrica.modaDemanda = moda;

    }

    public void GerarMetricasTempoOcioso()
    {
        // Calcula a Média
        int media = 0;

        for (int i = 0; i < listaTempoOcioso.Count; i++)
        {
            media += listaTempoOcioso[i];
        }

        if (listaTempoOcioso.Count != 0)
        {
            metrica.mediaOciosidade = media / listaTempoOcioso.Count;
        }
        // Calcula a Moda
        var moda = listaTempoOcioso.GroupBy(n => n).
               OrderByDescending(g => g.Count()).
               Select(g => g.Key).FirstOrDefault();

        metrica.modaOciosidade = moda;

    }


    // ---------------------------------------------------
    public void ExecutarSimulacaoTarefa3(int numeroServidores, List<int> varExTempoProcessamento, List<int> varExTempoDemanda)
    {
        // Cria variáveis para execução  dos métodos

        // Inicia var da fila
        List<int> filaExecucao = new List<int>();
        // Tempo na fila
        List<int> tempoNaFila = new List<int>();
        //  Variavel de Tempo
        int tempoTotal = 0;
        int tempoChegadaDemanda = 0;
        // var TempoOcioso
        int tempoOcioso = 0;
        // Var Servidores
        List<int> servidores = new List<int>();
        List<bool> servidorOcupado = new List<bool>();

        bool novaDemanda = false;

        for (int i = 0; i < numeroServidores; i++)
        {
            servidores.Add(0);
            servidorOcupado.Add(false);
        }



        while (varExTempoProcessamento.Count > 0 || varExTempoDemanda.Count > 0 || filaExecucao.Count > 0)
        {
            // Incrementa o tempo a cada iteração
            tempoTotal++;
            tempoChegadaDemanda++;

            // Faz o teste nova Demanda
            if (varExTempoDemanda.Count> 0)
            {
                 novaDemanda = tempoChegadaDemanda == varExTempoDemanda[0];
            }
            else
            {
                novaDemanda = false;
            }

            //----

            if (novaDemanda)
            {
                // Remove da Lista
                varExTempoDemanda.RemoveAt(0);
                // Zera  o tempoChegadaDemanda
                tempoChegadaDemanda = 0;
                // Verifica se o sistema esta executando algum pedido                    
                for (int i = 0; i < numeroServidores; i++)
                {

                    if (servidorOcupado[i] == false)
                    {
                        // Atribue nova chegada diretamente ao processamento
                        servidores[i] = varExTempoProcessamento[0];
                        // Deleta da fila
                        varExTempoProcessamento.RemoveAt(0);
                        // Muda o status do sistema par ocupado
                        servidorOcupado[i] = true;
                        //Adiciona 0(Zero) a lista tempo de espera
                        listaTempoEspera.Add(0);
                        // Parar
                        break;
                    }
                    else if(i == numeroServidores-1)
                    {
                        // Caso o sistema estiver ocioso, envia o dado para a lista.
                        if (tempoOcioso > 0)
                        {
                            listaTempoOcioso.Add(tempoOcioso);
                            tempoOcioso = 0;
                        }
                        // Adiciona a fila
                        filaExecucao.Add(varExTempoProcessamento[0]);
                        // Remove da lista de processamento
                        varExTempoProcessamento.RemoveAt(0);
                        // Cria nova posição na fila
                        tempoNaFila.Add(0);
                    }

                }

            } // Fim If Nova Demanda


            //// IF Sistema em Processamento
            for (int i = 0; i < numeroServidores; i++)
            {
                 // -----------------

                    if (servidorOcupado[i] && servidores[i] > 0)
                    {
                        servidores[i]--;
                    }
                    else
                    {
                        // Verifica se há alguem na fila
                        if (filaExecucao.Count > 0)
                        {
                            // Atribue novo processamento diretamente da fila
                            servidores[i] = filaExecucao[0];
                            // Deleta da fila
                            filaExecucao.RemoveAt(0);
                            // Adiciona o tempo de fila a lista TempoEspera
                            listaTempoEspera.Add(tempoNaFila[0]);
                            // Remove  da Lista tempo da fila elemento já computado
                            tempoNaFila.RemoveAt(0);
                            // Não há mudança no status do sistema
                            // Adiciona tempo Não ocioso
                            listaTempoOcioso.Add(0);

                        }
                        else
                        {
                            servidorOcupado[i] = false;
                        }
                    }


            } // Fim do IF Sistema em Processamento

            // Tempo de fila
            bool existeFila = filaExecucao.Count > 0;
            if (existeFila)
            {
                for (int i = 0; i < filaExecucao.Count; i++)
                {
                    tempoNaFila[i]++;
                }
            }
            else
            {
                tempoOcioso++;
            } // Fim tempo de fila


        }
        metrica.tempoTotal = tempoTotal;
    } // Fim método ExecutarSimulacao
}// Fim Namespace Classe

}

    
asked by anonymous 25.09.2016 / 18:47

0 answers