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

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

Kelvin Eger

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:

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

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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar