Problemas ao add no ArrayList (RESOLVIDO)

7 respostas
F

Pessoal, bom dia.

Sou novo em Java e estou tentando inserir registros em um ArrayList, mas quando insiro um registro, o novo registro sobrepõem os anteriores.
Como posso fazer para inserir sem sobrepor ???
Alguém pode me ajudar ??

Obrigado.
Fabio

Segue abaixo o código que estou usando para teste e o resultado.

import java.util.ArrayList;

public class NewMain {

private String nome = “”;

private int idade = 0;
public void setnome(String tnome){
    this.nome = tnome;
}
public void setidade(int tidade){
    this.idade = tidade;
}

public String getnome(){        
    return this.nome;
}    
public int getidade(){
    return this.idade;
}

public static void main(String[] args) {

    NewMain n = new NewMain();
    ArrayList<NewMain> a = new ArrayList<NewMain>();

    n.setidade(20);
    n.setnome("Teste 1");
    a.add(n);

    for (int i = 0; i < a.size(); i++) {
        System.out.println(a.get(i).getidade());
        System.out.println(a.get(i).getnome());
    }

    n.setidade(30);
    n.setnome("Teste 02");
    a.add(n);

    for (int i = 0; i < a.size(); i++) {
        System.out.println(a.get(i).getidade());
        System.out.println(a.get(i).getnome());
    }
}

}

resultado da execução:

20
Teste 1

30
Teste 02
30
Teste 02


O certo deveria ser:

20
Teste 1

20
Teste 1
30
Teste 02

7 Respostas

gilmaslima

primeiramente use a tag CODE

import java.util.ArrayList; 

public class NewMain { 
private String nome = ""; 
private int idade = 0; 

public void setnome(String tnome){ 
this.nome = tnome; 
} 
public void setidade(int tidade){ 
this.idade = tidade; 
} 

public String getnome(){ 
return this.nome; 
} 
public int getidade(){ 
return this.idade; 
} 

public static void main(String[] args) { 

NewMain n = new NewMain(); 
ArrayList<NewMain> a = new ArrayList<NewMain>(); 

n.setidade(20); 
n.setnome("Teste 1"); 
a.add(n); 

for (int i = 0; i < a.size(); i++) { 
System.out.println(a.get(i).getidade()); 
System.out.println(a.get(i).getnome()); 
} 

n.setidade(30); 
n.setnome("Teste 02"); 
a.add(n); 

for (int i = 0; i < a.size(); i++) { 
System.out.println(a.get(i).getidade()); 
System.out.println(a.get(i).getnome()); 
} 
} 
}

Está acontecendo isso, pq vc está adicionando o mesmo objeto sempre ao seu List

quando vc faz:

n.setidade(20); 
n.setnome("Teste 1");

A idade é int, por isso, altera, mas sua String nome não pq é um objeto e sua intancia de NewMain é a mesma.

Faça um teste criando uma nova instancia(objeto) de NewMain.

flw!

F

Gilmaslima, obrigado pela ajuda.

Acho q entendi o q vc me falou e fiz essa alteração:

import java.util.ArrayList;

public class NewMain {
private String nome = "";
private int idade = 0;

public void setnome(String tnome){
this.nome = tnome;
}
public void setidade(int tidade){
this.idade = tidade;
}

public String getnome(){
return this.nome;
}
public int getidade(){
return this.idade;
}

public static void main(String[] args) {

NewMain n = new NewMain();
NewMain n1 = new NewMain();
ArrayList<NewMain> a = new ArrayList<NewMain>();

n.setidade(20);
n.setnome("Teste 1");
a.add(n);

for (int i = 0; i < a.size(); i++) {
System.out.println(a.get(i).getidade());
System.out.println(a.get(i).getnome());
}

n1.setidade(30);
n1.setnome("Teste 02");
a.add(n1);

for (int i = 0; i < a.size(); i++) {
System.out.println(a.get(i).getidade());
System.out.println(a.get(i).getnome());
}
}

o resultado foi o q eu queria:

20
Teste 1
20
Teste 1
30
Teste 02


Mas assim, caso eu queira add 100 posições no arraylist vou ter q criar:

NewMain n1 = new NewMain();

.

.

.

NewMain n100 = new NewMain();

Como resolvo isso ???

Obrigado,
Fabio

G

Você pode fazer algo mais ou menos assim:

for (int i = 0 ; i < 100 ; i++) { NewMain n = new NewMain(); n.setidade(10); n.setnome("teste " + i) a.add(n); }

gilmaslima

geraldo.vec:
Você pode fazer algo mais ou menos assim:

for (int i = 0 ; i < 100 ; i++) { NewMain n = new NewMain(); n.setidade(10); n.setnome("teste " + i) a.add(n); }

Para isso funcionar precisa declarar fora do loop:

NewMain n = null; for (int i = 0 ; i < 100 ; i++) { n = new NewMain(); n.setidade(10); n.setnome("teste " + i) a.add(n); }

G

Porque precisa ser fora do loop?

F

Pessoal, boa tarde.

Consegui fazer utilizando o Loop !!! :smiley:

Muito obrigado pela ajuda.

Fabio

kenneth

Coloca [Resolvido] no titulo.

:smiley:

Criado 25 de fevereiro de 2011
Ultima resposta 26 de fev. de 2011
Respostas 7
Participantes 4