1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Hashmap altera o valor ao tentar comparar

Estou criando um código com o objetivo de gerar n inteiros aleatorios que estão sendo armazenados um HashMap. Estes valores não podem repetir, então faço um loop para fazer esta verificação. Na primeira volta, a verificação funciona, porém no segundo teste, ele iguala o valor de ("var" + j) e ("var" + i), com isso ele entra em loop infinito. Testei com dois modos de comparação: o operador (==) e o método equals, conforme código abaixo:

Onde está o erro?

Att,


import java.util.HashMap;
import java.util.Map;
import java.util.Random;

public class SomatoriaAno {

    public static void main(String[] args) {

        gerarVariaveis(2);

    }

    public static void gerarVariaveis(int qtd) {

        Random random = new Random();

        Map<String, Integer> valores = new HashMap<String, Integer>();
        for (int i = 0; i < qtd; i++) {
            valores.put("var" + i, random.nextInt(10));
        }

        for (int i = 0; i < qtd; i++) {
            for (int j = qtd - 1; j > 0; j--) {

                // Aqui - na primeira volta quando os valores são diferentes ele funciona corretamente
                // Porem no segundo teste, ele iguala o valor de ("var" + j) e ("var" + i)
                // Com isso ele entra em loop infinito
                while (valores.get("var" + j) == valores.get("var" + i)){
                    valores.put("var" + j, random.nextInt(10));
                }

                // Tentei a comparação com método equals e não surtiu efeito
                while (valores.get("var" + i).equals(valores.get("var" + j))) {
                    valores.put("var" + j, random.nextInt(10));
                }
            }
        }

    }
}
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java ou faça a sua própria pergunta.