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 publicMappesquisaPorIdade(intidadeMin,intidadeMax){if(mapa.size()==0){returnnull;}if(idadeMin<=0&&idadeMax<=0)returnnull;if(idadeMin>=idadeMax){returnnull;}for(inti=0;i<mapa.size();i++){Pessoaaux=(Pessoa)mapa.get(i);if(idadeMin<=aux.getIdade()&&idadeMax>=aux.getIdade()){mapa.put(aux.getIdade(),aux);}else{}}returnmapa;}
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.
Douglas como o seu Map está sendo preenchido, com que valores?
Douglas_Magno
privateMapmapa=newTreeMap<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 publicMappesquisaPorIdade(intidadeMin,intidadeMax){if(mapa.size()==0){returnnull;}if(idadeMin<=0&&idadeMax<=0)returnnull;if(idadeMin>=idadeMax){returnnull;}for(inti=0;i<mapa.size();i++){Pessoaaux=(Pessoa)mapa.get(i);if(idadeMin<=aux.getIdade()&&idadeMax>=aux.getIdade()){mapa.put(aux.getIdade(),aux);}else{}}returnmapa;}
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.
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
importjava.util.*;importjava.text.SimpleDateFormat;publicclassAgenda{//private ArrayList<Pessoa> pessoas;privateMapmapa;publicAgenda(){mapa=newTreeMap<String,Integer>();//pessoas = new ArrayList<Pessoa>(); }//procurar telefone na lista publicStringprocurarTelefone(Stringnome){if(nome==null)returnnull;if(mapa.size()==0){returnnull;}for(intk=0;k<mapa.size();k++){Pessoaatual=(Pessoa)mapa.get(k);if(nome.equalsIgnoreCase(atual.getNome())){returnatual.getTelefone();}}returnnull;}//adiciona uma pessoa na agenda publicvoidadicionarPessoa(Pessoap){mapa.put(p.getNome(),p);}publicPessoapesPorNome(Stringnome){return(Pessoa)mapa.get(nome);}//exibe uma faixa etaria de idade que o usuário determinar publicMappesquisaPorIdade(intidadeMin,intidadeMax){if(mapa.size()==0){returnnull;}if(idadeMin<=0&&idadeMax<=0)returnnull;if(idadeMin>=idadeMax){returnnull;}for(inti=0;i<mapa.size();i++){Pessoaaux=(Pessoa)mapa.get(i);if(idadeMin<=aux.getIdade()&&idadeMax>=aux.getIdade()){mapa.put(aux.getIdade(),aux);}else{}}returnmapa;}
ta ai o codigo da agenda todo
M
marcobiscaro2112
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
marcobiscaro2112
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.
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:
importjava.util.*;importjava.text.SimpleDateFormat;publicclassAgenda{//private ArrayList<Pessoa> pessoas;privateMapmapa;publicAgenda(){mapa=newTreeMap<String,Integer>();//pessoas = new ArrayList<Pessoa>(); }//procurar telefone na lista publicStringprocurarTelefone(Stringnome){if(nome==null)returnnull;if(mapa.size()==0){returnnull;}for(intk=0;k<mapa.size();k++){Pessoaatual=(Pessoa)mapa.get(k);if(nome.equalsIgnoreCase(atual.getNome())){returnatual.getTelefone();}}returnnull;}//adiciona uma pessoa na agenda publicvoidadicionarPessoa(Pessoap){mapa.put(p.getNome(),p);}publicPessoapesPorNome(Stringnome){return(Pessoa)mapa.get(nome);}//exibe uma faixa etaria de idade que o usuário determinar publicMappesquisaPorIdade(intidadeMin,intidadeMax){if(mapa.size()==0){returnnull;}if(idadeMin<=0&&idadeMax<=0)returnnull;if(idadeMin>=idadeMax){returnnull;}for(inti=0;i<mapa.size();i++){Pessoaaux=(Pessoa)mapa.get(i);if(idadeMin<=aux.getIdade()&&idadeMax>=aux.getIdade()){mapa.put(aux.getIdade(),aux);}else{}}returnmapa;}
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..
publicclassteste{publicstaticvoidmain(String[]args){Map<String,Integer>mapPessoas=newTreeMap<String,Integer>();//Chave é o nome, valor é a idademapPessoas.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.Stringnome=entry.getKey();//entry.getValue te retorna o valor que é a respectiva idade;Integeridade=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:
importjava.util.*;importjava.text.SimpleDateFormat;publicclassAgenda{//private ArrayList<Pessoa> pessoas;privateMapmapa;publicAgenda(){mapa=newTreeMap<String,Integer>();//pessoas = new ArrayList<Pessoa>(); }//procurar telefone na lista publicStringprocurarTelefone(Stringnome){if(nome==null)returnnull;if(mapa.size()==0){returnnull;}for(intk=0;k<mapa.size();k++){Pessoaatual=(Pessoa)mapa.get(k);if(nome.equalsIgnoreCase(atual.getNome())){returnatual.getTelefone();}}returnnull;}//adiciona uma pessoa na agenda publicvoidadicionarPessoa(Pessoap){mapa.put(p.getNome(),p);}publicPessoapesPorNome(Stringnome){return(Pessoa)mapa.get(nome);}//exibe uma faixa etaria de idade que o usuário determinar publicMappesquisaPorIdade(intidadeMin,intidadeMax){if(mapa.size()==0){returnnull;}if(idadeMin<=0&&idadeMax<=0)returnnull;if(idadeMin>=idadeMax){returnnull;}for(inti=0;i<mapa.size();i++){Pessoaaux=(Pessoa)mapa.get(i);if(idadeMin<=aux.getIdade()&&idadeMax>=aux.getIdade()){mapa.put(aux.getIdade(),aux);}else{}}returnmapa;}
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..
publicclassteste{publicstaticvoidmain(String[]args){Map<String,Integer>mapPessoas=newTreeMap<String,Integer>();//Chave é o nome, valor é a idademapPessoas.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.Stringnome=entry.getKey();//entry.getValue te retorna o valor que é a respectiva idade;Integeridade=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:
importjava.util.*;importjava.text.SimpleDateFormat;publicclassAgenda{//private ArrayList<Pessoa> pessoas;privateMapmapa;publicAgenda(){mapa=newTreeMap<String,Integer>();//pessoas = new ArrayList<Pessoa>(); }//procurar telefone na lista publicStringprocurarTelefone(Stringnome){if(nome==null)returnnull;if(mapa.size()==0){returnnull;}for(intk=0;k<mapa.size();k++){Pessoaatual=(Pessoa)mapa.get(k);if(nome.equalsIgnoreCase(atual.getNome())){returnatual.getTelefone();}}returnnull;}//adiciona uma pessoa na agenda publicvoidadicionarPessoa(Pessoap){mapa.put(p.getNome(),p);}publicPessoapesPorNome(Stringnome){return(Pessoa)mapa.get(nome);}//exibe uma faixa etaria de idade que o usuário determinar publicMappesquisaPorIdade(intidadeMin,intidadeMax){if(mapa.size()==0){returnnull;}if(idadeMin<=0&&idadeMax<=0)returnnull;if(idadeMin>=idadeMax){returnnull;}for(inti=0;i<mapa.size();i++){Pessoaaux=(Pessoa)mapa.get(i);if(idadeMin<=aux.getIdade()&&idadeMax>=aux.getIdade()){mapa.put(aux.getIdade(),aux);}else{}}returnmapa;}
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..
publicclassteste{publicstaticvoidmain(String[]args){Map<String,Integer>mapPessoas=newTreeMap<String,Integer>();//Chave é o nome, valor é a idademapPessoas.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.Stringnome=entry.getKey();//entry.getValue te retorna o valor que é a respectiva idade;Integeridade=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