entao esse ArrayList(coleçao de objeto),seria uma versao compacta e auto-contida(encapsulamento?),do modo adicionar correto?
Pois nele já esta sendo adicionado todos os nomes de personagens que forem passados pelo meu professor…e e ele poderia passar n nomes,que seriam alocados?
O codigo mais adequado entao seria mesmo o q o Anayami me poassou a principio??
E aqueles “imports”,eu acabei tirando eles por duvidas…
Exatamente, tipo você poderia adicionar várias vezes sem necessitar do list mas precisaria criar um objeto a cada vez, para não sobrepôr o valor que estava contido e tal.
Olha nem olhei o codigo que ele fez. Mas é coisa bem rápida e simples como disse. Caso queira eu te ajudo.
E o import é basicamente isso
import java.util.ArrayList;
//ou para importar tudo que existe em uma biblioteca faça isso
import java.util.*;
aceitoo toda a ajuda que puder me oferecer!!
Ah, agora que eu vi… heh
não pode List? Com ArrayList ficaria bem fácil:[code]package avaliacaoE5Questao02;
import java.util.ArrayList;
public class ListaPersonagens {
//implemente aqui uma atributo para armazenar ORDENADAMENTE os personagens
private ArrayList<String> minhalista = new ArrayList<String>();
//crie métodos GET e SET para o atributo criado acima.
public void adicionar(String time){
minhalista.add(time);
}
public boolean contem(String time){
if (minhalista.indexOf(time) != -1)
return false;
else
return true;
}
public void limpa(){
minhalista.clear();
}
public void imprimir(){
for (int pos = 0; pos < minhalista.size(); pos++)
System.out.println(minhalista.get(pos));
}
// gets e sets
public ArrayList getMinhalista()
{
return minhalista;
}
public void setMinhalista(ArrayList minhalista)
{
this.minhalista = minhalista;
}
}[/code]Tem algum tipo de objeto que ele quer que você use especificamente?
Não parecia haver a restrição contra ArrayList no enunciado…
ArrayList não tem nada a ver com encapsulamento, encapsular é proteger o acesso direto aos atributos de uma instância fora da classe onde eles foram declarados… tipo, você não pode referenciar direto instancia.var = x, teria que chamar o método setVar dessa instância…
no enunciado realmente nao tem,
mas eu passei um e-mail p ele ,e ele discretamente me contou que alguns alunos perderam ppontos por causa de nao terem usado os metodos GET/SET…
ai por isso que eu tive q mudar o plano de trabalho inicial q o Hugo estava me orientando…
Pronto, responderam para ti.
ahahah
\o
Acho que o método imprimir, ficaria mais simples e menos trabalhado assim oh:
//para cada posição do ArrayList listaPersonagens ele
//vai atribuir o que tem naquela posição na variavel local
//nome tipo String e vai imprimi-lá.
public void imprimir(){
for(String nome : listaPersonagens){
System.out.println(nome);
}
}
caso esteja errado me avise, é que estou no trabalho e não tem como instalar as parafernalhas do java aqui no servidor. :\
professor para Wells:
Nos outros dois programas (ListaPersonagens)deve utilizar TreeSet. O objetivo é didático, não adianta fazer o que não entende. Eu ensinei ArrayList em sala, mas não acho didaticamente interessante utilizar nesta tarefa.
Tem necessariamente que empregar GET e SET, pois faz parte do trabalho empregar estes métodos para garantir encapsulamento. Inclusive retirei ponto de alunos que fizeram chamadas diretas aos atributos sem utilizar GET e SET, para mim isto é um erro grave, pois fere severamente o encapsulamento das classes.
entenderam?
Ué, gets e sets se referem a encapsulamento.
Você pode ter gets e sets para qualquer atributo… inclusive o ArrayList que eu fiz, como você pode ver no código ali.
Não há nada que te impeça de implementar gets e sets para um ArrayList…
Vou copiar…
e vou continuar fazendo perg.até conseguir entender tudo que vcs me passaram.
Muy Gracias!!!
Então, você terá que criar um objeto para cada nome que quiser adicionar. Entende? Fica menos complicado. É m critério do professor né, que assim seja então.
mas se eu criar esse objeto antes,Hugo,
vc nao acha que estranho,pois até onde eu entendi a Testadora já me passa os nomes…
isso nao ficaria errado nao?
Hum, TreeSet é mais interessante porque já ordena…
Não há grandes mudanças, a lógica continua a mesma:[code]package avaliacaoE5Questao02;
import java.util.TreeSet;
public class ListaPersonagens {
//implemente aqui uma atributo para armazenar ORDENADAMENTE os personagens
private TreeSet<String> minhalista = new TreeSet<String>();
//crie métodos GET e SET para o atributo criado acima.
public void adicionar(String time){
minhalista.add(time);
}
public boolean contem(String time){
if (minhalista.contains(time))
return true;
else
return false;
}
public void limpa(){
minhalista.clear();
}
public void imprimir(){
System.out.println(minhalista);
}
// gets e sets
public TreeSet getMinhalista()
{
return minhalista;
}
public void setMinhalista(TreeSet minhalista)
{
this.minhalista = minhalista;
}
}[/code]
[edit: notar que as mudanças são só em alguns métodos: o indexOf virou um simples contains…
notar também que no print da lista ele já vem ordenado alfabeticamente, característica do TreeSet]
o que extamente é esse TreeSet,tem algo a ver com arvore??ou mesmo com o metodo SET em especifico?
explicaçao please…
Hum… tipo, uma estrutura de árvore já ordena os elementos na inserção. Portanto, os elementos na árvore já estão sempre ordenados… um problema disso é quando você tem uma estrutura muito grande, daí pode demorar muito para inserir/remover, mas certamente não é o caso…
Isso não tem nada a ver com o método Set, são sentidos bem diferentes.
só pra melhorar um pouco, o imprimir() fica mais bonitinho com um Iterator para percorrer a lista:public void imprimir(){
Iterator listaIterator = minhalista.iterator();
while(listaIterator.hasNext())
System.out.println(listaIterator.next());
}
daí adiciona o import pro java.util.Iterator…
ok!!!
e esse Interetor,qual a funçao dele??
O Iterator serve pra percorrer o conteúdo de uma estrutura, no caso, o nosso TreeSet…
primeiro ele retorna todos os elementos da lista - o que acontece em listaIterator = minhalista.iterator();
daí a idéia é percorrer esses elementos com a idéia “enquanto tiver um próximo elemento, mostrar esse elemento”… que é o while(listaIterator.hasNext()), System.out.println(listaIterator.next());
entendi…
muito clara a sua explicaçao Ayanami.
Volto daqui a pouco com mais duvidas!
Mas muitissimo obrigado(por enquanto…)ao Hugo e ao Ayanami!!
haha Estou aprendendo também, não sabia como funcionava isso de Iterator, tinha alguma idéia só.
haha
Qualquer estamos aqui no aguardo, isso que dá não ter nada para fazer no trabalho. \o
Abraços
é o seguinte,
surgiu um novo problema em outra questao que estou fazendo,
e algumas coisa nao entendi…
entao vou postar aqui p q alguem me oriente…
package avaliacaoE5Questao01;
import java.util.Map;
import java.util.TreeMap;
public abstract class Mapa {
protected Lic<Integer, Livro> estoque = new TreeMap<Integer, Livro>();
public abstract void adicionarLivros(Livro reg);
public abstract void adicionar(Integer chave, Livro liv);
public abstract boolean excluir(Integer chave);
public abstract Livro buscar(Integer chave);
public abstract void imprimir();
}
Bom,eu tive que herdar a classe Mapa para construir a classe EstoqueLivro.não entendi muito bem o porq que o professor passou isso,pois me parece mais facil simplesmente mais facil fazer uma classe EstoqueLivros do nada,ao inves de herdar…entao aceito explicaçoes aqui(se alguem quiser eu posto o enunciado do exercicio)
import java.util.Map;
import java.util.TreeMap;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import avaliacaoE5Questao01.Mapa;
public abstract class EstoqueLivros extends Mapa {
protected Map<Integer, Livro> estoque = new TreeMap<Integer, Livro>();
public abstract void adicionarLivros(Livro reg){
int chave = estoque.size();
estoque.put(chave, reg);
}
public abstract void adicionarLivros(Integer chave, Livro reg){
estoque.put(chave, reg);
}
public abstract boolean excluirLivros(Integer chave){
estoque.remove(chave);
}
public abstract Livro buscar(Integer chave);
public abstract void imprimir(){
Set<Integer> listaDeChaves = estoque.keySet();
for(Iterator<Integer> it = listaDeChaves.iterator(); it.hasNext();){
Integer chave = it.next();
System.out.println(chave+ " - "+estoque.get(chave));
}
}
public Map<Integer, Livro> getEstoque() {
return estoque;
}
public void setEstoque(Map<Integer, Livro> estoque) {
this.estoque = estoque;
}
}
Qual a utilidade desse “chave” no codigo?
E dessa “listaDeChaves”?
Eu copiei essa estrutura que eu implementei aqui,de um outro trabalho feito em sala…e talvez por isso nao esteja sabendo adaptar ela…
Poste o enunciado…
Esses métodos da classe Mapa não têm código, certo?
Então, Mapa é uma interface; esse não é um caso de Extends, e sim de Implements.
Você que vai ter que escrever esses métodos descritos na classe Mapa na sua classe EstoqueLivros.