Duvida com Map

18 respostas
Douglas_Magno
eu to colocando essa duvida aqui, pois de um problema de exceção codigo
//exibe uma faixa etaria de idade que o usuário determinar 
   public  Map pesquisaPorIdade(int idadeMin, int idadeMax){
        if(mapa.size() == 0){
            return null;
        }
       if (idadeMin <= 0 && idadeMax<=0)
            return null;
         
        if(idadeMin >= idadeMax){
            return null;
        }            
        for(int i = 0; i < mapa.size(); i++){
            Pessoa aux = (Pessoa)mapa.get(i);
            if(idadeMin <= aux.getIdade() && idadeMax >= aux.getIdade()){
                mapa.put(aux.getIdade(),aux);
            }else{}
        }
    return mapa;
    }
o problema que esta dando é que quando eu passo o parametro da pesquisa, ai ele da um problema nessa linha
Pessoa aux = (Pessoa)mapa.get(i);
a mensagem que aparece é:ClassCastException: Java.lang.String cannot be cast to java.lang.Interger(in java.lang.Integer), essa é a mensagem de erro que aparece.

espero que vocês possam me ajudar.

18 Respostas

strong

Douglas como o seu Map está sendo preenchido, com que valores?

Douglas_Magno
private Map mapa = new TreeMap<String, Pessoa>();

Com String

charlestff
Douglas Magno:
eu to colocando essa duvida aqui, pois de um problema de exceção codigo
//exibe uma faixa etaria de idade que o usuário determinar 
   public  Map pesquisaPorIdade(int idadeMin, int idadeMax){
        if(mapa.size() == 0){
            return null;
        }
       if (idadeMin <= 0 && idadeMax<=0)
            return null;
         
        if(idadeMin >= idadeMax){
            return null;
        }            
        for(int i = 0; i < mapa.size(); i++){
            Pessoa aux = (Pessoa)mapa.get(i);
            if(idadeMin <= aux.getIdade() && idadeMax >= aux.getIdade()){
                mapa.put(aux.getIdade(),aux);
            }else{}
        }
    return mapa;
    }
o problema que esta dando é que quando eu passo o parametro da pesquisa, ai ele da um problema nessa linha
Pessoa aux = (Pessoa)mapa.get(i);
a mensagem que aparece é:ClassCastException: Java.lang.String cannot be cast to java.lang.Interger(in java.lang.Integer), essa é a mensagem de erro que aparece.

O problema é que Seu Map é de String, e no laço você está dando um get passando um valor inteiro "mapa.get(i)" sendo que você não tem esse valor lá.

strong

Correto o que nosso amigo charlestff disse.
Vc tem que dar um get no objeto mapa passando pra ele o nome da sua chave por exemplo:

Map mapa = new TreeMap<String, Integer>(); mapa.put("douglas", 10); mapa.get("douglas");

charlestff
strong:
Correto o que nosso amigo charlestff disse. Vc tem que dar um get no objeto mapa passando pra ele o nome da sua chave por exemplo:
Map mapa = new TreeMap<String, Integer>(); 
	mapa.put("douglas", 10);
	mapa.get("douglas");

Na verdade acho mais facil ele percorrer o Map utilizando os entrys.

for (Entry<String, Integer> entry : mapa.entrySet()){ 

     //Ele vai percorrer todos os elementos da map e aqui dentro basta fazer sua validação..

     if(idadeMin <= aux.getIdade() && idadeMax >= aux.getIdade()){  
          mapa.put(aux.getIdade(),aux);  
     }else{}  
}
Douglas_Magno

não deu certo eu passei meu mapa para Integer e deu o mesmo erro

charlestff

Coloque o código completo aqui por favor.

Douglas_Magno
import java.util.*;
import java.text.SimpleDateFormat;

public class Agenda{

   //private ArrayList<Pessoa> pessoas;
    
    private Map mapa;
   
    public Agenda(){
        mapa = new TreeMap<String, Integer>();
        //pessoas = new ArrayList<Pessoa>();         
    }
    
    //procurar telefone na lista 
    public String procurarTelefone(String nome){
          if (nome == null)
             return null;

          if(mapa.size() == 0){
                return null;
            }
        for (int k=0; k<mapa.size(); k++){
            Pessoa atual = (Pessoa)mapa.get(k);
            if (nome.equalsIgnoreCase(atual.getNome())){
                return atual.getTelefone();
            }
        }
        return null;
      
    }

    
    //adiciona uma pessoa na agenda    
    public void adicionarPessoa (Pessoa p){
        mapa.put(p.getNome(),p);
    }
    
  
    public Pessoa pesPorNome(String nome){
        return (Pessoa)mapa.get(nome);
    }
    
    //exibe uma faixa etaria de idade que o usuário determinar 
   public  Map pesquisaPorIdade(int idadeMin, int idadeMax){
        if(mapa.size() == 0){
            return null;
        }
       if (idadeMin <= 0 && idadeMax<=0)
            return null;
         
        if(idadeMin >= idadeMax){
            return null;
        }            
        for(int i = 0; i < mapa.size(); i++){
            Pessoa aux = (Pessoa)mapa.get(i);
            if(idadeMin <= aux.getIdade() && idadeMax >= aux.getIdade()){
                mapa.put(aux.getIdade(),aux);
            }else{}
        }
    return mapa;
    }

ta ai o codigo da agenda todo

M

Você não precisa de um Map para fazer isso. Um List resolve.

Douglas_Magno

é por que meu professor pediu para eu resolver usando mapa

eu ja fiz essa agenda com arraylist e com vetor normal só falta com mapa

M

Seguinte: um mapa é uma associação de chave/valor.

Você está associando números como chaves e os objetos Pessoa como valores. Resumindo: está atuando exatamente como uma lista (só está mais complexo).

De qualquer forma, se é um exercício, isso é aceitável.

Antes de mais nada, uma dica: sempre que possível use Generics em suas listas e mapas.

Faça algo assim:

Map<Integer, String> mapa;
// e na hora de instanciar:
mapa = new HashMap<Integer, String>();

Isso evita casts no código e também que objetos indevidos sejam inseridos na lista ou no mapa.

Além disso essa mudança deve clarear um pouco mais a situação para você e talvez te ajude a resolver seu problema.

strong

da uma olhada mais profunda na implementação.

charlestff
Douglas Magno:
import java.util.*;
import java.text.SimpleDateFormat;

public class Agenda{

   //private ArrayList<Pessoa> pessoas;
    
    private Map mapa;
   
    public Agenda(){
        mapa = new TreeMap<String, Integer>();
        //pessoas = new ArrayList<Pessoa>();         
    }
    
    //procurar telefone na lista 
    public String procurarTelefone(String nome){
          if (nome == null)
             return null;

          if(mapa.size() == 0){
                return null;
            }
        for (int k=0; k<mapa.size(); k++){
            Pessoa atual = (Pessoa)mapa.get(k);
            if (nome.equalsIgnoreCase(atual.getNome())){
                return atual.getTelefone();
            }
        }
        return null;
      
    }

    
    //adiciona uma pessoa na agenda    
    public void adicionarPessoa (Pessoa p){
        mapa.put(p.getNome(),p);
    }
    
  
    public Pessoa pesPorNome(String nome){
        return (Pessoa)mapa.get(nome);
    }
    
    //exibe uma faixa etaria de idade que o usuário determinar 
   public  Map pesquisaPorIdade(int idadeMin, int idadeMax){
        if(mapa.size() == 0){
            return null;
        }
       if (idadeMin <= 0 && idadeMax<=0)
            return null;
         
        if(idadeMin >= idadeMax){
            return null;
        }            
        for(int i = 0; i < mapa.size(); i++){
            Pessoa aux = (Pessoa)mapa.get(i);
            if(idadeMin <= aux.getIdade() && idadeMax >= aux.getIdade()){
                mapa.put(aux.getIdade(),aux);
            }else{}
        }
    return mapa;
    }

ta ai o codigo da agenda todo

Seguinte toda a implementação foi feita de forma inadequada, sugiro que estude mais sobre maps para fazer a implementação utilizando a mesma, como eu havia te dito você criou seu treeMap como String e nos laços você está passando passando um valor inteiro "map.get("aqui você está passando um valor inteiro sendo que sua chave é string") ", segue abaixo um exemplo que pode te auxiliar na implementação..

public class teste {
	
	public static void main (String[] args){
		
		Map<String, Integer> mapPessoas = new TreeMap<String, Integer>();
		
		//Chave é o nome, valor é a idade
		mapPessoas.put("Charles", 17);
		mapPessoas.put("Douglas", 2);
		
              //Aqui ele vai percorrer todos os objetos da map.
		for (Entry<String, Integer> entry : mapPessoas.entrySet()) {
			//entry.getKey() te retorna a chave que é o nome da pessoa.
			String nome = entry.getKey();
			//entry.getValue te retorna o valor que é a respectiva idade;
			Integer idade = entry.getValue();
			
			System.out.println("nome : "+nome +" idade :"+idade);
		}
Douglas_Magno

obrigado charlestff

valeu cara

desculpa é porque começei hoje a ver mapa

strong

Assim também tem jeito.

Pessoa p = new Pessoa(); p.setNome("douglas"); p.setId(10L); Map mapa = new TreeMap<Integer, Pessoa>(); mapa.put(1, p); for (int i = 1; i <= mapa.size(); i++) { Pessoa pessoa = (Pessoa) mapa.get(i); System.out.println("Nome pessoa: "+pessoa.getNome()); System.out.println("Id pessoa: "+pessoa.getId()); }

lina
charlestff:
Douglas Magno:
import java.util.*;
import java.text.SimpleDateFormat;

public class Agenda{

   //private ArrayList<Pessoa> pessoas;
    
    private Map mapa;
   
    public Agenda(){
        mapa = new TreeMap<String, Integer>();
        //pessoas = new ArrayList<Pessoa>();         
    }
    
    //procurar telefone na lista 
    public String procurarTelefone(String nome){
          if (nome == null)
             return null;

          if(mapa.size() == 0){
                return null;
            }
        for (int k=0; k<mapa.size(); k++){
            Pessoa atual = (Pessoa)mapa.get(k);
            if (nome.equalsIgnoreCase(atual.getNome())){
                return atual.getTelefone();
            }
        }
        return null;
      
    }

    
    //adiciona uma pessoa na agenda    
    public void adicionarPessoa (Pessoa p){
        mapa.put(p.getNome(),p);
    }
    
  
    public Pessoa pesPorNome(String nome){
        return (Pessoa)mapa.get(nome);
    }
    
    //exibe uma faixa etaria de idade que o usuário determinar 
   public  Map pesquisaPorIdade(int idadeMin, int idadeMax){
        if(mapa.size() == 0){
            return null;
        }
       if (idadeMin <= 0 && idadeMax<=0)
            return null;
         
        if(idadeMin >= idadeMax){
            return null;
        }            
        for(int i = 0; i < mapa.size(); i++){
            Pessoa aux = (Pessoa)mapa.get(i);
            if(idadeMin <= aux.getIdade() && idadeMax >= aux.getIdade()){
                mapa.put(aux.getIdade(),aux);
            }else{}
        }
    return mapa;
    }

ta ai o codigo da agenda todo

Seguinte toda a implementação foi feita de forma inadequada, sugiro que estude mais sobre maps para fazer a implementação utilizando a mesma, como eu havia te dito você criou seu treeMap como String e nos laços você está passando passando um valor inteiro "map.get("aqui você está passando um valor inteiro sendo que sua chave é string") ", segue abaixo um exemplo que pode te auxiliar na implementação..

public class teste {
	
	public static void main (String[] args){
		
		Map<String, Integer> mapPessoas = new TreeMap<String, Integer>();
		
		//Chave é o nome, valor é a idade
		mapPessoas.put("Charles", 17);
		mapPessoas.put("Douglas", 2);
		
              //Aqui ele vai percorrer todos os objetos da map.
		for (Entry<String, Integer> entry : mapPessoas.entrySet()) {
			//entry.getKey() te retorna a chave que é o nome da pessoa.
			String nome = entry.getKey();
			//entry.getValue te retorna o valor que é a respectiva idade;
			Integer idade = entry.getValue();
			
			System.out.println("nome : "+nome +" idade :"+idade);
		}

Oi,

Só complementando o seu Quote do outro tópico, a minha resposta foi clara e o objetiva. No caso dele, não era necessário postar o código inteiro para identificar qual o problema.

A partir do stack que ele postou, dava pra ver. Com a minha solução, bastava ele procurar uma saida.

Tchauzin!

charlestff
lina:
charlestff:
Douglas Magno:
import java.util.*;
import java.text.SimpleDateFormat;

public class Agenda{

   //private ArrayList<Pessoa> pessoas;
    
    private Map mapa;
   
    public Agenda(){
        mapa = new TreeMap<String, Integer>();
        //pessoas = new ArrayList<Pessoa>();         
    }
    
    //procurar telefone na lista 
    public String procurarTelefone(String nome){
          if (nome == null)
             return null;

          if(mapa.size() == 0){
                return null;
            }
        for (int k=0; k<mapa.size(); k++){
            Pessoa atual = (Pessoa)mapa.get(k);
            if (nome.equalsIgnoreCase(atual.getNome())){
                return atual.getTelefone();
            }
        }
        return null;
      
    }

    
    //adiciona uma pessoa na agenda    
    public void adicionarPessoa (Pessoa p){
        mapa.put(p.getNome(),p);
    }
    
  
    public Pessoa pesPorNome(String nome){
        return (Pessoa)mapa.get(nome);
    }
    
    //exibe uma faixa etaria de idade que o usuário determinar 
   public  Map pesquisaPorIdade(int idadeMin, int idadeMax){
        if(mapa.size() == 0){
            return null;
        }
       if (idadeMin <= 0 && idadeMax<=0)
            return null;
         
        if(idadeMin >= idadeMax){
            return null;
        }            
        for(int i = 0; i < mapa.size(); i++){
            Pessoa aux = (Pessoa)mapa.get(i);
            if(idadeMin <= aux.getIdade() && idadeMax >= aux.getIdade()){
                mapa.put(aux.getIdade(),aux);
            }else{}
        }
    return mapa;
    }

ta ai o codigo da agenda todo

Seguinte toda a implementação foi feita de forma inadequada, sugiro que estude mais sobre maps para fazer a implementação utilizando a mesma, como eu havia te dito você criou seu treeMap como String e nos laços você está passando passando um valor inteiro "map.get("aqui você está passando um valor inteiro sendo que sua chave é string") ", segue abaixo um exemplo que pode te auxiliar na implementação..

public class teste {
	
	public static void main (String[] args){
		
		Map<String, Integer> mapPessoas = new TreeMap<String, Integer>();
		
		//Chave é o nome, valor é a idade
		mapPessoas.put("Charles", 17);
		mapPessoas.put("Douglas", 2);
		
              //Aqui ele vai percorrer todos os objetos da map.
		for (Entry<String, Integer> entry : mapPessoas.entrySet()) {
			//entry.getKey() te retorna a chave que é o nome da pessoa.
			String nome = entry.getKey();
			//entry.getValue te retorna o valor que é a respectiva idade;
			Integer idade = entry.getValue();
			
			System.out.println("nome : "+nome +" idade :"+idade);
		}

Oi,

Só complementando o seu Quote do outro tópico, a minha resposta foi clara e o objetiva. No caso dele, não era necessário postar o código inteiro para identificar qual o problema.

A partir do stack que ele postou, dava pra ver. Com a minha solução, bastava ele procurar uma saida.

Tchauzin!

Douglas Magno:
não deu certo eu passei meu mapa para Integer e deu o mesmo erro

Oii,
Na verdade ele precisou postar o código todo pois haviamos passado a solução para o problema dele e ele tinha dito que não foi resolvido, e como você mesma pode ver, o código inteiro foi implementado de forma incorreta, mais de qualquer forma você estava certa só quis colocar uma segunda opnião. :wink:
abraço

Douglas_Magno

obrigado galera pela contribuição de vocês

valeu

vou procurar melhora meu codigo

Criado 1 de dezembro de 2010
Ultima resposta 1 de dez. de 2010
Respostas 18
Participantes 5