Logo Hardware.com.br
Raul_Kl
Raul_Kl Veterano Registrado
1.2K Mensagens 65 Curtidas

[Resolvido] Array de objetos em java

#1 Por Raul_Kl 14/11/2011 - 00:31
Estou querendo fazer um jogo de cartas em java, é um trabalho para o curso que estou fazendo. Quero fazer um array de cartas, sendo que cada carta possui vários atributos.

O problema é que ao manipular os dados no array, ele retorna sempre a última carta inserida, não importa a posição. Talvez alguém aí saiba onde está o erro na minha lógica...

Segue o código:

public class EncontraCoringa {
private int max = 54;
private int numCartas = 3;
private int coringa = 53;
private int posCoringa;
private int posCarta;
private Carta crt;
private Carta[] baralho;
private Carta[] listaCartas;

public void setBaralho(){
crt = new Carta();
baralho = new Carta[max];
for (int i=0; i < max; i++) {
baralho[i] = new Carta();
}
crt.setCodigo(1);
crt.setNome("2_copas.png&quot;
crt.setValor(2);
crt.setNaipe(1);
baralho[0] = crt;
crt.setCodigo(2);
crt.setNome("3_copas.png&quot;
crt.setValor(3);
crt.setNaipe(1);
baralho[1] = crt;
crt.setCodigo(3);
crt.setNome("4_copas.png&quot;
crt.setValor(4);
crt.setNaipe(1);
baralho[2] = crt;
crt.setCodigo(4);
crt.setNome("5_copas.png&quot;
crt.setValor(5);
crt.setNaipe(1);
baralho[3] = crt;
crt.setCodigo(5);
crt.setNome("6_copas.png&quot;
crt.setValor(6);
crt.setNaipe(1);
baralho[4] = crt;
crt.setCodigo(6);
crt.setNome("7_copas.png&quot;
crt.setValor(7);
crt.setNaipe(1);
baralho[5] = crt;
crt.setCodigo(7);
crt.setNome("8_copas.png&quot;
crt.setValor(8);
crt.setNaipe(1);
baralho[6] = crt;
crt.setCodigo(8);
crt.setNome("9_copas.png&quot;
crt.setValor(9);
crt.setNaipe(1);
baralho[7] = crt;
crt.setCodigo(9);
crt.setNome("10_copas.png&quot;
crt.setValor(10);
crt.setNaipe(1);
baralho[8] = crt;
crt.setCodigo(10);
crt.setNome("J_copas.png&quot;
crt.setValor(11);
crt.setNaipe(1);
baralho[9] = crt;
crt.setCodigo(11);
crt.setNome("Q_copas.png&quot;
crt.setValor(12);
crt.setNaipe(1);
baralho[10] = crt;
crt.setCodigo(12);
crt.setNome("K_copas.png&quot;
crt.setValor(13);
crt.setNaipe(1);
baralho[11] = crt;
crt.setCodigo(13);
crt.setNome("A_copas.png&quot;
crt.setValor(14);
crt.setNaipe(1);
baralho[12] = crt;
crt.setCodigo(14);
crt.setNome("2_espadas.png&quot;
crt.setValor(2);
crt.setNaipe(2);
baralho[13] = crt;
crt.setCodigo(15);
crt.setNome("3_espadas.png&quot;
crt.setValor(3);
crt.setNaipe(2);
baralho[14] = crt;
crt.setCodigo(16);
crt.setNome("4_espadas.png&quot;
crt.setValor(4);
crt.setNaipe(2);
baralho[15] = crt;
crt.setCodigo(17);
crt.setNome("5_espadas.png&quot;
crt.setValor(5);
crt.setNaipe(2);
baralho[16] = crt;
crt.setCodigo(18);
crt.setNome("6_espadas.png&quot;
crt.setValor(6);
crt.setNaipe(2);
baralho[17] = crt;
crt.setCodigo(19);
crt.setNome("7_espadas.png&quot;
crt.setValor(7);
crt.setNaipe(2);
baralho[18] = crt;
crt.setCodigo(20);
crt.setNome("8_espadas.png&quot;
crt.setValor(8);
crt.setNaipe(2);
baralho[19] = crt;
crt.setCodigo(21);
crt.setNome("9_espadas.png&quot;
crt.setValor(9);
crt.setNaipe(2);
baralho[20] = crt;
crt.setCodigo(22);
crt.setNome("10_espadas.png&quot;
crt.setValor(10);
crt.setNaipe(2);
baralho[21] = crt;
crt.setCodigo(23);
crt.setNome("J_espadas.png&quot;
crt.setValor(11);
crt.setNaipe(2);
baralho[22] = crt;
crt.setCodigo(24);
crt.setNome("Q_espadas.png&quot;
crt.setValor(12);
crt.setNaipe(2);
baralho[23] = crt;
crt.setCodigo(25);
crt.setNome("K_espadas.png&quot;
crt.setValor(13);
crt.setNaipe(2);
baralho[24] = crt;
crt.setCodigo(26);
crt.setNome("A_espadas.png&quot;
crt.setValor(14);
crt.setNaipe(2);
baralho[25] = crt;
crt.setCodigo(27);
crt.setNome("2_ouro.png&quot;
crt.setValor(2);
crt.setNaipe(3);
baralho[26] = crt;
crt.setCodigo(28);
crt.setNome("3_ouro.png&quot;
crt.setValor(3);
crt.setNaipe(3);
baralho[27] = crt;
crt.setCodigo(29);
crt.setNome("4_ouro.png&quot;
crt.setValor(4);
crt.setNaipe(3);
baralho[28] = crt;
crt.setCodigo(30);
crt.setNome("5_ouro.png&quot;
crt.setValor(5);
crt.setNaipe(3);
baralho[29] = crt;
crt.setCodigo(31);
crt.setNome("6_ouro.png&quot;
crt.setValor(6);
crt.setNaipe(3);
baralho[30] = crt;
crt.setCodigo(32);
crt.setNome("7_ouro.png&quot;
crt.setValor(7);
crt.setNaipe(3);
baralho[31] = crt;
crt.setCodigo(33);
crt.setNome("8_ouro.png&quot;
crt.setValor(8);
crt.setNaipe(3);
baralho[32] = crt;
crt.setCodigo(34);
crt.setNome("9_ouro.png&quot;
crt.setValor(9);
crt.setNaipe(3);
baralho[33] = crt;
crt.setCodigo(35);
crt.setNome("10_ouro.png&quot;
crt.setValor(10);
crt.setNaipe(3);
baralho[34] = crt;
crt.setCodigo(36);
crt.setNome("J_ouro.png&quot;
crt.setValor(11);
crt.setNaipe(3);
baralho[35] = crt;
crt.setCodigo(37);
crt.setNome("Q_ouro.png&quot;
crt.setValor(12);
crt.setNaipe(3);
baralho[36] = crt;
crt.setCodigo(38);
crt.setNome("K_ouro.png&quot;
crt.setValor(13);
crt.setNaipe(3);
baralho[37] = crt;
crt.setCodigo(39);
crt.setNome("A_ouro.png&quot;
crt.setValor(14);
crt.setNaipe(3);
baralho[38] = crt;
crt.setCodigo(40);
crt.setNome("2_paus.png&quot;
crt.setValor(2);
crt.setNaipe(4);
baralho[39] = crt;
crt.setCodigo(41);
crt.setNome("3_paus.png&quot;
crt.setValor(3);
crt.setNaipe(4);
baralho[40] = crt;
crt.setCodigo(42);
crt.setNome("4_paus.png&quot;
crt.setValor(4);
crt.setNaipe(4);
baralho[41] = crt;
crt.setCodigo(43);
crt.setNome("5_paus.png&quot;
crt.setValor(5);
crt.setNaipe(4);
baralho[42] = crt;
crt.setCodigo(44);
crt.setNome("6_paus.png&quot;
crt.setValor(6);
crt.setNaipe(4);
baralho[43] = crt;
crt.setCodigo(45);
crt.setNome("7_paus.png&quot;
crt.setValor(7);
crt.setNaipe(4);
baralho[44] = crt;
crt.setCodigo(46);
crt.setNome("8_paus.png&quot;
crt.setValor(8);
crt.setNaipe(4);
baralho[45] = crt;
crt.setCodigo(47);
crt.setNome("9_paus.png&quot;
crt.setValor(9);
crt.setNaipe(4);
baralho[46] = crt;
crt.setCodigo(48);
crt.setNome("10_paus.png&quot;
crt.setValor(10);
crt.setNaipe(4);
baralho[47] = crt;
crt.setCodigo(49);
crt.setNome("J_paus.png&quot;
crt.setValor(11);
crt.setNaipe(4);
baralho[48] = crt;
crt.setCodigo(50);
crt.setNome("Q_paus.png&quot;
crt.setValor(12);
crt.setNaipe(4);
baralho[49] = crt;
crt.setCodigo(51);
crt.setNome("K_paus.png&quot;
crt.setValor(13);
crt.setNaipe(4);
baralho[50] = crt;
crt.setCodigo(52);
crt.setNome("A_paus.png&quot;
crt.setValor(14);
crt.setNaipe(4);
baralho[51] = crt;
crt.setCodigo(53);
crt.setNome("coringa_preto.png&quot;
crt.setValor(15);
crt.setNaipe(5);
baralho[52] = crt;
crt.setCodigo(54);
crt.setNome("coringa_vermelho.png&quot;
crt.setValor(15);
crt.setNaipe(5);
baralho[53] = crt;
}

public void setPosCarta() {
this.setBaralho();
listaCartas = new Carta[numCartas];
posCoringa = 0 + (int)(Math.random() * (numCartas-1));
for (int i=0; i < numCartas; i++) {
if (i != posCoringa) {
posCarta = 0 + (int)(Math.random() * (max-2));
listaCartas[i] = this.baralho[posCarta];
} else {
listaCartas[i] = (this.baralho[coringa]);
}
}

// Adicionado para testes
for (int i = 0; i < numCartas; i++) {
System.out.println("Posição: "+i);
System.out.println("Código: "+this.listaCartas[i].getCodigo());
System.out.println("Nome: "+this.listaCartas[i].getNome());
System.out.println("---------------------------------------------&quot;
}
}
}
E o resultado:

run:
Posição: 0
Código: 54
Nome: coringa_vermelho.png
---------------------------------------------
Posição: 1
Código: 54
Nome: coringa_vermelho.png
---------------------------------------------
Posição: 2
Código: 54
Nome: coringa_vermelho.png
---------------------------------------------
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)
tpcvasco
tpcvasco General de Pijama Registrado
2.9K Mensagens 330 Curtidas
#2 Por tpcvasco
14/11/2011 - 09:21
Qdo vc pega crt e muda seu atributos, vc está alterando sempre o mesmo objeto na memória. Ou seja, todos estão apontando para o mesmo lugar.
antes de CADA crt.setCodigo(X), coloque uma linha
crt = new Carta();
Assim vc vai criar cada um dos 54 objetos, a cada new.
"Milhouse: - Médicos e bombeiros são heróis.
Bart Simpson: - Olha, as casas continuam pegando fogo e as pessoas continuam doentes. Os verdadeiros heróis são os Schwarzenegger's, os Stallone's, e, em menores proporções, os Vandame's..."
Raul_Kl
Raul_Kl Veterano Registrado
1.2K Mensagens 65 Curtidas
#3 Por Raul_Kl
14/11/2011 - 13:23
Era isso mesmo. Eu imaginava que depois de atribuir "crt" a "baralho", eu poderia alterar os atributos de "crt" e os atributos de "baralho" permaneceriam inalterados.

Alterei o código conforme citação abaixo, e agora está funcionando perfeitamente.


public class EncontraCoringa {
private int max = 54;
private int numCartas = 3;
private int coringa = 53;
private int posCoringa;
private int posCarta;
private Carta[] baralho;
private Carta[] listaCartas;

public void setBaralho(){
baralho = new Carta[max];
for (int i=0; i < max; i++) {
baralho[i] = new Carta();
}
baralho[0].setCodigo(1);
baralho[0].setNome("2_copas.png&quot;
baralho[0].setValor(2);
baralho[0].setNaipe(1);
baralho[1].setCodigo(2);
baralho[1].setNome("3_copas.png&quot;
baralho[1].setValor(3);
baralho[1].setNaipe(1);
baralho[2].setCodigo(3);
baralho[2].setNome("4_copas.png&quot;
baralho[2].setValor(4);
baralho[2].setNaipe(1);
baralho[3].setCodigo(4);
baralho[3].setNome("5_copas.png&quot;
baralho[3].setValor(5);
baralho[3].setNaipe(1);
baralho[4].setCodigo(5);
baralho[4].setNome("6_copas.png&quot;
baralho[4].setValor(6);
baralho[4].setNaipe(1);
baralho[5].setCodigo(6);
baralho[5].setNome("7_copas.png&quot;
baralho[5].setValor(7);
baralho[5].setNaipe(1);
baralho[6].setCodigo(7);
baralho[6].setNome("8_copas.png&quot;
baralho[6].setValor(8);
baralho[6].setNaipe(1);
baralho[7].setCodigo(8);
baralho[7].setNome("9_copas.png&quot;
baralho[7].setValor(9);
baralho[7].setNaipe(1);
baralho[8].setCodigo(9);
baralho[8].setNome("10_copas.png&quot;
baralho[8].setValor(10);
baralho[8].setNaipe(1);
baralho[9].setCodigo(10);
baralho[9].setNome("J_copas.png&quot;
baralho[9].setValor(11);
baralho[9].setNaipe(1);
baralho[10].setCodigo(11);
baralho[10].setNome("Q_copas.png&quot;
baralho[10].setValor(12);
baralho[10].setNaipe(1);
baralho[11].setCodigo(12);
baralho[11].setNome("K_copas.png&quot;
baralho[11].setValor(13);
baralho[11].setNaipe(1);
baralho[12].setCodigo(13);
baralho[12].setNome("A_copas.png&quot;
baralho[12].setValor(14);
baralho[12].setNaipe(1);
baralho[13].setCodigo(14);
baralho[13].setNome("2_espadas.png&quot;
baralho[13].setValor(2);
baralho[13].setNaipe(2);
baralho[14].setCodigo(15);
baralho[14].setNome("3_espadas.png&quot;
baralho[14].setValor(3);
baralho[14].setNaipe(2);
baralho[15].setCodigo(16);
baralho[15].setNome("4_espadas.png&quot;
baralho[15].setValor(4);
baralho[15].setNaipe(2);
baralho[16].setCodigo(17);
baralho[16].setNome("5_espadas.png&quot;
baralho[16].setValor(5);
baralho[16].setNaipe(2);
baralho[17].setCodigo(18);
baralho[17].setNome("6_espadas.png&quot;
baralho[17].setValor(6);
baralho[17].setNaipe(2);
baralho[18].setCodigo(19);
baralho[18].setNome("7_espadas.png&quot;
baralho[18].setValor(7);
baralho[18].setNaipe(2);
baralho[19].setCodigo(20);
baralho[19].setNome("8_espadas.png&quot;
baralho[19].setValor(8);
baralho[19].setNaipe(2);
baralho[20].setCodigo(21);
baralho[20].setNome("9_espadas.png&quot;
baralho[20].setValor(9);
baralho[20].setNaipe(2);
baralho[21].setCodigo(22);
baralho[21].setNome("10_espadas.png&quot;
baralho[21].setValor(10);
baralho[21].setNaipe(2);
baralho[22].setCodigo(23);
baralho[22].setNome("J_espadas.png&quot;
baralho[22].setValor(11);
baralho[22].setNaipe(2);
baralho[23].setCodigo(24);
baralho[23].setNome("Q_espadas.png&quot;
baralho[23].setValor(12);
baralho[23].setNaipe(2);
baralho[24].setCodigo(25);
baralho[24].setNome("K_espadas.png&quot;
baralho[24].setValor(13);
baralho[24].setNaipe(2);
baralho[25].setCodigo(26);
baralho[25].setNome("A_espadas.png&quot;
baralho[25].setValor(14);
baralho[25].setNaipe(2);
baralho[26].setCodigo(27);
baralho[26].setNome("2_ouro.png&quot;
baralho[26].setValor(2);
baralho[26].setNaipe(3);
baralho[27].setCodigo(28);
baralho[27].setNome("3_ouro.png&quot;
baralho[27].setValor(3);
baralho[27].setNaipe(3);
baralho[28].setCodigo(29);
baralho[28].setNome("4_ouro.png&quot;
baralho[28].setValor(4);
baralho[28].setNaipe(3);
baralho[29].setCodigo(30);
baralho[29].setNome("5_ouro.png&quot;
baralho[29].setValor(5);
baralho[29].setNaipe(3);
baralho[30].setCodigo(31);
baralho[30].setNome("6_ouro.png&quot;
baralho[30].setValor(6);
baralho[30].setNaipe(3);
baralho[31].setCodigo(32);
baralho[31].setNome("7_ouro.png&quot;
baralho[31].setValor(7);
baralho[31].setNaipe(3);
baralho[32].setCodigo(33);
baralho[32].setNome("8_ouro.png&quot;
baralho[32].setValor(8);
baralho[32].setNaipe(3);
baralho[33].setCodigo(34);
baralho[33].setNome("9_ouro.png&quot;
baralho[33].setValor(9);
baralho[33].setNaipe(3);
baralho[34].setCodigo(35);
baralho[34].setNome("10_ouro.png&quot;
baralho[34].setValor(10);
baralho[34].setNaipe(3);
baralho[35].setCodigo(36);
baralho[35].setNome("J_ouro.png&quot;
baralho[35].setValor(11);
baralho[35].setNaipe(3);
baralho[36].setCodigo(37);
baralho[36].setNome("Q_ouro.png&quot;
baralho[36].setValor(12);
baralho[36].setNaipe(3);
baralho[37].setCodigo(38);
baralho[37].setNome("K_ouro.png&quot;
baralho[37].setValor(13);
baralho[37].setNaipe(3);
baralho[38].setCodigo(39);
baralho[38].setNome("A_ouro.png&quot;
baralho[38].setValor(14);
baralho[38].setNaipe(3);
baralho[39].setCodigo(40);
baralho[39].setNome("2_paus.png&quot;
baralho[39].setValor(2);
baralho[39].setNaipe(4);
baralho[40].setCodigo(41);
baralho[40].setNome("3_paus.png&quot;
baralho[40].setValor(3);
baralho[40].setNaipe(4);
baralho[41].setCodigo(42);
baralho[41].setNome("4_paus.png&quot;
baralho[41].setValor(4);
baralho[41].setNaipe(4);
baralho[42].setCodigo(43);
baralho[42].setNome("5_paus.png&quot;
baralho[42].setValor(5);
baralho[42].setNaipe(4);
baralho[43].setCodigo(44);
baralho[43].setNome("6_paus.png&quot;
baralho[43].setValor(6);
baralho[43].setNaipe(4);
baralho[44].setCodigo(45);
baralho[44].setNome("7_paus.png&quot;
baralho[44].setValor(7);
baralho[44].setNaipe(4);
baralho[45].setCodigo(46);
baralho[45].setNome("8_paus.png&quot;
baralho[45].setValor(8);
baralho[45].setNaipe(4);
baralho[46].setCodigo(47);
baralho[46].setNome("9_paus.png&quot;
baralho[46].setValor(9);
baralho[46].setNaipe(4);
baralho[47].setCodigo(48);
baralho[47].setNome("10_paus.png&quot;
baralho[47].setValor(10);
baralho[47].setNaipe(4);
baralho[48].setCodigo(49);
baralho[48].setNome("J_paus.png&quot;
baralho[48].setValor(11);
baralho[48].setNaipe(4);
baralho[49].setCodigo(50);
baralho[49].setNome("Q_paus.png&quot;
baralho[49].setValor(12);
baralho[49].setNaipe(4);
baralho[50].setCodigo(51);
baralho[50].setNome("K_paus.png&quot;
baralho[50].setValor(13);
baralho[50].setNaipe(4);
baralho[51].setCodigo(52);
baralho[51].setNome("A_paus.png&quot;
baralho[51].setValor(14);
baralho[51].setNaipe(4);
baralho[52].setCodigo(53);
baralho[52].setNome("coringa_preto.png&quot;
baralho[52].setValor(15);
baralho[52].setNaipe(5);
baralho[53].setCodigo(54);
baralho[53].setNome("coringa_vermelho.png&quot;
baralho[53].setValor(15);
baralho[53].setNaipe(5);
}

public void setPosCarta() {
this.setBaralho();
listaCartas = new Carta[numCartas];
posCoringa = (int)(Math.random() * (numCartas));
for (int i=0; i < numCartas; i++) {
if (i != posCoringa) {
posCarta = (int)(Math.random() * (max-1));
listaCartas[i] = this.baralho[posCarta];
} else {
listaCartas[i] = (this.baralho[coringa]);
}
}

// Adicionado para testes
for (int i = 0; i < numCartas; i++) {
System.out.println("Posição: "+i);
System.out.println("Código: "+this.listaCartas[i].getCodigo());
System.out.println("Nome: "+this.listaCartas[i].getNome());
System.out.println("---------------------------------------------&quot;
}
}
}
O resultado:

run:
Posição: 0
Código: 25
Nome: K_espadas.png
---------------------------------------------
Posição: 1
Código: 54
Nome: coringa_vermelho.png
---------------------------------------------
Posição: 2
Código: 27
Nome: 2_ouro.png
---------------------------------------------
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)
Obrigado pela força! Resolveu o problema.
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal