Fórum ArrayList de objetos acesando #579408
27/03/2017
0
Preciso acessar um atributo dentro do meu objeto que está dentro de um arrayList
Do jeito que tento não funciona, pois ele retorna um objeto quando deveria retornar inteiro
O erro acontece na ultima linha, dentro do for
segue abaixo o cod
Do jeito que tento não funciona, pois ele retorna um objeto quando deveria retornar inteiro
O erro acontece na ultima linha, dentro do for
segue abaixo o cod
public static void main(String[] args) {
Scanner ler = new Scanner(System.in);
ArrayList objetos = new ArrayList();
Posição nova = new Posição();
int cont = 1;
String opcao = "S";
while (opcao.equals("S") || opcao.equals("sim") || opcao.equals("s")) {
System.out.println("Informe algo para guardar");
nova.setConteudo(ler.next());
nova.setSituacaoAnte(false);
nova.setSituacaoPost(false);
nova.setPosicao(cont);
nova.setSituacaoMinha(true);
cont++;
objetos.add(nova);
System.out.println("Deseja contiinuar? S/N");
opcao = ler.next();
}
for(int j=0; j<= objetos.size(); j++){
System.out.println("conteudo: " + objetos.getClass(nova.getConteudo()));
}
Kelvin Eger
Curtir tópico
+ 0
Responder
Post mais votado
27/03/2017
Algumas dicas:
- Crie arraylist com o tipo da classe dos objetos que ele vai possuir. Ai quando chamar o metodos get() para pegar o objeto, ja vai ser retornado o seu tipo de objeto. Ex:
- Evite usar ç e acento no nome das tuas variaveis. (só por boas praticas de programação)
E temos dois problemas graves pra execução do teu código.
O primeiro é que tu ta usando sempre o mesmo objeto, cada vez que tu chama o setConteudo e adiciona na lista, tu ta adicionado o mesmo objeto e alterando o conteúdo dele, ou seja, tu adiciona o objeto na lista na posição 1 com o conteúdo X, quando tu adicionar o segundo com conteúdo Y, o valor da primeira e da segunda posição vão valer Y, recomendo dar uma olhada sobre referencia de objetos. Pra resolver isso tu deve criar o teu objeto dentro do teu while e sempre adicionar um novo objeto na lista: Ex
E o segundo motivo: tua ultima linha não faz muito sentido... tu ta chamando getClass, o metodo correto é get(index). Acredito que seria algo, tipo:
Valeu
- Crie arraylist com o tipo da classe dos objetos que ele vai possuir. Ai quando chamar o metodos get() para pegar o objeto, ja vai ser retornado o seu tipo de objeto. Ex:
Arraylist<Posicao> objetos = new ArrayList<>();
- Evite usar ç e acento no nome das tuas variaveis. (só por boas praticas de programação)
E temos dois problemas graves pra execução do teu código.
O primeiro é que tu ta usando sempre o mesmo objeto, cada vez que tu chama o setConteudo e adiciona na lista, tu ta adicionado o mesmo objeto e alterando o conteúdo dele, ou seja, tu adiciona o objeto na lista na posição 1 com o conteúdo X, quando tu adicionar o segundo com conteúdo Y, o valor da primeira e da segunda posição vão valer Y, recomendo dar uma olhada sobre referencia de objetos. Pra resolver isso tu deve criar o teu objeto dentro do teu while e sempre adicionar um novo objeto na lista: Ex
while (opcao.equals("S") || opcao.equals("sim") || opcao.equals("s")) {
Posição nova = new Posição();
System.out.println("Informe algo para guardar");
nova.setConteudo(ler.next());
nova.setSituacaoAnte(false);
nova.setSituacaoPost(false);
nova.setPosicao(cont);
nova.setSituacaoMinha(true);
cont++;
objetos.add(nova);
System.out.println("Deseja contiinuar? S/N");
opcao = ler.next();
}
E o segundo motivo: tua ultima linha não faz muito sentido... tu ta chamando getClass, o metodo correto é get(index). Acredito que seria algo, tipo:
for(int j=0; j<= objetos.size(); j++){
System.out.println("conteudo: " + objetos.get(j).getConteudo());
}
Valeu
Wazowski
Responder
Gostei + 1
Mais Posts
27/03/2017
Wazowski
Outro detalhe: O ultimo for vai estourar na ultimo posição do array, deve ser usado < e não <= no contador do loop
for(int j=0; j < objetos.size(); j++){
System.out.println("conteudo: " + objetos.get(j).getConteudo());
}
Responder
Gostei + 1
Clique aqui para fazer login e interagir na Comunidade :)