Bug com divisão em laço FOR

3 respostas
J

Bom dia.

Estou com um Bug no meu código, que não consigo identificar.

O programa pega um arquivo CSV com 80000 registros, divide em 4 grupos (por sazonalidades) e processa as informaçoes.
Funcionou bem com varios arquivos de teste, porém com um deles teve um comportamento anormal.
no laço FOR abaixo, ele em um determinado momento, para de calcular o valor de RT.

[color=green] public void CalculaRisco(Vector<Medidas> vetormedidas){

int TotalDados = 0;

    double TempMaiores = 0;

    vetormedidas = CalculaTemperaturaCondutor(vetormedidas);

    TotalDados = vetormedidas.size();

    for (Medidas med : vetormedidas) {
        
        if (med.getTS() &gt; p.getTP()){
            TempMaiores++;[/color]
            [b]p.setRT((TempMaiores / TotalDados)); [/b]
        }            
    }

}

o objeto p tem o seguinte tipo:

[color=blue]public class Parametros {

double RT = 0;               //Risco Termico Calculado

public double getRT() {
    return RT;
}

public void setRT(double RT) {
    this.RT = RT;
}

}[/color]

tem uma tela do debug que eu tirei.

Se alguém puder me ajudar, agradeço desde já.


3 Respostas

E

Esquisito, dá a impressão que o debugador está meio zoado. Em tese, TempMaiores nunca poderia ser zero.

J

Na verdade TempMaiores inicia com zero.

Jogo uma corrente, que faz calculo de temperaturas em todos os registros. depois calcula a porcentagem que ultrapassou uma certa temperatura.
Esse laço FOR é repetido varias vezes até que o RT seja igual a 0.15

Na primeira vez, o programa executa esse FOR e acha o RT = 0.945… que é o valor mostrado.
Em seguida, o laço FOR é repetido e ele nao calcula mais o RT, mantem o valor que estava.

Como eu disse, ele funciona com outros arquivos de dados semelhantes, e nesse, ele funciona em 60000 dos 80000 registros. No ultimo conjunto de dados ele da esse problema.
O arquivo não está corrompido, porque foi testado de outras maneiras.

J

Resolvi o problema reiniciando a variavel antes de cada laço.

TotalDados = vetormedidas.size();

p.setRT(0);

for (Medidas med : vetormedidas) {
        if (med.getTS() &gt; p.getTP()){
            TempMaiores++;
            p.setRT((TempMaiores / TotalDados));   //Calcula o Risco Térmico
        }            
    }
Criado 19 de outubro de 2010
Ultima resposta 19 de out. de 2010
Respostas 3
Participantes 2