Variable loses value before operation C#

Asked

Viewed 100 times

1

I haven’t dealt with C#for a while, I’m making a simple code, to perform simulations on demand and process data, applying FIFO. My problem is regarding the variable attributes of the Fila class, I performed the program debug and noticed that when running the generating methodMetricas() the attributes are empty, with the . 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

}

  • And what do you expect it to be? Does it ever have the value you expect? Have you run the simulation yet? There it removes elements. Alias it seems to me that the class depends on a call order of the methods to work. This is not usually a good idea.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.