Iterar hashmap

boa noite!

eu preciso de programar um método que calcule a velocidade instantanea dum dispositivo.

tenho um hashmap de posições (pos) que representa uma posicao(classe com coordenada em x e y) para cada instante de tempo (key).

o que eu pretendo é aplicar a formula (coordenada em x final - coordenada em x inicial) / (tf-ti) para calcular a vx e vy e depois calcular a norma desse vector.

usei o seguinte código:

 public void calculaSpeed()
{
            for (int i=0; i<pos.size(); i++)
            {
            double vx = (pos.get(i+1).getCx() - pos.get(i).getCx()) /
            (pos.get(i+1).getCx() - pos.get(i).getCx());
    
            double vy = (pos.get(i+1).getCy() - pos.get(i).getCy()) /
            (pos.get(i+1).getCy() - pos.get(i).getCy());
            
            Double velocidade = sqrt((pow(vx,2)+pow(vy,2)));
            
            speed.add(velocidade);
            }
 }

dá-me erro de NullPointer!

alguém sabe como corrigir?
Obrigado

Não se itera um Hashmap, mas podes iterar um Set de Entry do Hashmap. Um Entry é um par chave(key)=>valor(value). Dê uma olhada na API do Hashmap e procure por EntrySet.

Até!

[quote=macnet]boa noite!

eu preciso de programar um método que calcule a velocidade instantanea dum dispositivo.

tenho um hashmap de posições (pos) que representa uma posicao(classe com coordenada em x e y) para cada instante de tempo (key).

o que eu pretendo é aplicar a formula (coordenada em x final - coordenada em x inicial) / (tf-ti) para calcular a vx e vy e depois calcular a norma desse vector.[/quote]

     public void calculaSpeed()
    {
                for (int i=0; i<pos.size(); i++)
                {
                double vx = (pos.get(i+1).getCx() - pos.get(i).getCx()) /
                (pos.get(i+1).getCx() - pos.get(i).getCx());
        
                double vy = (pos.get(i+1).getCy() - pos.get(i).getCy()) /
                (pos.get(i+1).getCy() - pos.get(i).getCy());
                
                Double velocidade = sqrt((pow(vx,2)+pow(vy,2)));
                
                speed.add(velocidade);
                }
     }

Amigo como é o seu primeiro post, das proximas vezes coloca seu codigo dentro das tags code, fica mais facil de entender o que vc quer, blz… bons estudos!

  1. Crie uma classe que representa um Vetor matemático. Adicine nessa classe métodos para somar 2 vetores, dividi-los por um escalar, etc.
  2. Você pode iterar por um mapa assim:

for (Map.Entry<Float, Vector2D> entry : pos.entrySet()) { float time = entry.getKey(); Vector2D position = entry.getPosition(); }